繁体   English   中英

Mysql插入带有值的查询并选择作为子查询

[英]Mysql Insert query with values and select as subquery

我尝试了许多解决方案,但无法使我的查询正常工作。

我正在尝试创建一个类似系统,该系统在代码中将检查被喜欢的项目是否存在,并且尚未被喜欢。

我想我的查询已经结束,但是我一直收到错误消息。

变量“ $ this_is_liked”已预定义为值“是”,变量“ $ liked_user_id”已预定义为已登录用户的值(在此示例中为1),然后从pms_inventory中提取“ $ liked_item_id”表中,当我尝试让它检查项目ID是否存在,并且尚未被喜欢时。

下面是我的代码,然后是错误。

        if(isset($_POST['type'], $_POST['itemid'], $_POST['liked']))  {
            include_once('connectdb.php');
            include_once('global.php');
            $liked_item_id = (int)$_POST['itemid']; // Liked Item ID
            $liked_user_id = (int)$_SESSION['id']; // User ID
            $this_is_liked = $_POST['liked']; // Value of "Yes"
        mysql_query("
        INSERT INTO pms_inventory_likes 
            (
            liked,
            user_id, 
            item_id, 
            )
            VALUES
            (
            SELECT 
            {$this_is_liked}, {$liked_user_id}, {$liked_item_id} 
            FROM pms_inventory
            WHERE EXISTS (
                SELECT id 
                FROM pms_inventory
                WHERE id = {$liked_item_id})
            AND NOT EXISTS (
                SELECT id 
                FROM pms_inventory_likes 
                WHERE user_id = {$liked_user_id} 
                AND item_id = {$liked_item_id} 
                AND liked = 'Yes')  
            )
            LIMIT 1
        ") or die(mysql_error());
    }

这是错误:

    <span>You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')
            VALUES
            (
            SELECT 
            Yes, 1, 40 
            FROM pms_inventory
            ' at line 6</span>

我不确定是否正确嵌套了“ SELECT”,或者是否正确标记了值。

请让我知道是否需要更多信息!

试试这个可能对您有帮助...

              INSERT INTO pms_inventory_likes 
                (liked,
                user_id, 
                item_id) 

               SELECT {$this_is_liked}, {$liked_user_id}, {$liked_item_id} FROM pms_inventory

                WHERE EXISTS (
                    SELECT id 
                    FROM pms_inventory
                    WHERE id = {$liked_item_id})

                AND NOT EXISTS (
                    SELECT id 
                    FROM pms_inventory_likes 
                    WHERE user_id = {$liked_user_id} 
                    AND item_id = {$liked_item_id} 
                    AND liked = "Yes")  
                LIMIT 1

有关更多参考,请参考以下链接:

Oracle插入(如果不存在)语句

http://www.techonthenet.com/oracle/insert.php

http://docs.oracle.com/cd/E17952_01/refman-5.1-zh-CN/exists-and-not-exists-subqueries.html

在上面的两个贡献者的帮助下,我得以找到问题的最终根源... 除了删除语句的“ VALUES”部分并在“ {$ this_is_liked}”周围加上单引号 (感谢Senk)和K.Raj),就像往常一样,我们所有人似乎都错过了这个微小的语法错误,终于使它起作用了:

    INSERT INTO pms_inventory_likes 
        (
        liked,
        user_id, 
        **item_id,** 
        )

item_id后面有一个逗号,使代码无法运行。 对于那些想使用此代码为您的站点构建简单的“ Like”系统的人,代码的最终有效版本是:

    if(isset($_POST['type'], $_POST['itemid'], $_POST['liked']))  {
        include_once('connectdb.php');
        include_once('global.php');
        $liked_item_id = (int)$_POST['itemid']; // Liked Item ID
        $liked_user_id = (int)$_SESSION['id']; // User ID
        $this_is_liked = $_POST['liked']; // Value of "Yes"
    mysql_query("
    INSERT INTO pms_inventory_likes 
        (
        liked,
        user_id, 
        item_id
        )
        SELECT 
        '{$this_is_liked}', {$liked_user_id}, {$liked_item_id} 
        FROM pms_inventory
        WHERE EXISTS (
            SELECT id 
            FROM pms_inventory
            WHERE id = {$liked_item_id})
        AND NOT EXISTS (
            SELECT id 
            FROM pms_inventory_likes 
            WHERE user_id = {$liked_user_id} 
            AND item_id = {$liked_item_id} 
            AND liked = 'Yes')  
        LIMIT 1
    ") or die(mysql_error());
}

并且数据库中的表将需要是id,user_id,item_id和liked。

我希望这可以帮助别人!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM