[英]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
有关更多参考,请参考以下链接:
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.