SQL语法错误

时间:2011-03-07 13:04:04

标签: mysql sql

UPDATE `comment` 

SET `agree`=`agree`+1,(INSERT INTO `reacted_on` VALUES (10,197))
WHERE `id`=197 and 0 = (SELECT COUNT(*) FROM `reacted_on` WHERE `id_user`=10 and `id_comment`=197)

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
'(INSERT INTO `reacted_on` VALUES (10,197)) WHERE `id`=197 and 0 = (SELECT COUNT(' at line 1

我想在agree中对comment进行icrement $con = mysql_connect($my_sql_servername,$my_sql_username,$my_sql_password); mysql_select_db($my_sql_database, $con); if($validation != $_SESSION['validation']) die('-1'); $sql = "IF NOT EXISTS (SELECT * FROM `reacted_on` WHERE `id_user`=".$id_user." and `id_comment`=".$id_comment." ) THEN INSERT INTO `reacted_on` VALUES (10,197); UPDATE `comment` SET `agree`=`agree`+1 WHERE `id`=".$id_comment." END IF;"; //echo $sql; if(!mysql_query($sql)){die(mysql_error());} ,但我想阻止同一个用户同意多条评论。因此,首先我检查用户是否对同一评论做出了反应;我增加同意。然后我插入一行以防止用户对同一个评论做出反应。

我错过了什么?为什么不是真的? 我该怎么做才能解决问题?

如何在UPDATE查询中使用INSERT语句?

这是我使用查询的地方:

{{1}}

4 个答案:

答案 0 :(得分:2)

这是完全错的;)

您正在进行UPDATE查询,然后,无处不在,有一个INSERT子查询,您无法访问。我甚至会说有一个右括号,这里没有任何关系。

答案 1 :(得分:1)

基本上,这样的事情,可能是:

IF NOT EXISTS (
              SELECT *
              FROM `reacted_on`
              WHERE `id_user`=10 and `id_comment`=197
              )
THEN
  INSERT INTO `reacted_on` VALUES (10,197);
  UPDATE `comment`
  SET `agree`=`agree`+1
  WHERE `id`=197;
END IF;

您必须使用单独的语句来执行此操作,但您可以将它们包装到单个IF指令中。


修改

检查行是否存在的另一种方法是使用SELECT COUNT(*)...(就像在尝试的脚本中一样)。因此,上述查询的开头将更改为:

IF 0 = (
       SELECT COUNT(*)
       FROM `reacted_on`
       WHERE `id_user`=10 and `id_comment`=197
       )
THEN
  ... /* same as above */

答案 2 :(得分:0)

你想在这做什么?根据应用程序的业务逻辑描述它。

看起来您可能尝试在表reacted_on中插入一行,然后更新表comment中的相应行。执行此操作的最佳方法是一个接一个地发出两个查询。更好的是,将这两个查询包装在transaction中;这样,如果出现任何问题,您的表格将不会保持不一致。

答案 3 :(得分:0)

  

如果你插入

  INSERT INTO `reacted_on` (id_user,id_comment) VALUES (10,197); ( first correct your insert statement) 
  then
  SELECT COUNT(*) FROM `reacted_on` WHERE `id_user`=10 and `id_comment`=197` 
  

将始终返回大于1

请解释一下你想做什么? 你不能在mysql(AFAIK)中一起更新两个表

更新

我不知道你在两张桌子之间的关系是什么,但我建议以下方式

$count_comment = mysql_query("SELECT COUNT(*) FROM `reacted_on` WHERE `id_user`=10 and `id_comment`=197"); 
if(!$count_comment)
{
    $sql= " UPDATE `comment` SET `agree`=`agree`+1 WHERE `id`=197";
    mysql_query($sql);
    $sql2= " INSERT INTO `reacted_on`(id_user,id_comment) VALUES (10,197) ";
    mysql_query($sql2);     
}
else
{ 
    // whatever u want to display
}