Ошибка синтаксиса SQL - PullRequest
2 голосов
/ 07 марта 2011
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, но я хочу, чтобы один и тот же пользователь не мог согласиться на комментарий более одного.Поэтому сначала я проверяю, отреагировал ли пользователь на тот же комментарий;Я согласен.Затем я вставляю строку, чтобы пользователь больше не реагировал на тот же комментарий.

Что мне не хватает?почему это не правда?Что я должен сделать, чтобы решить проблему?

Как использовать оператор INSERT в запросе UPDATE?

Здесь я использую запрос:

        $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());}

Ответы [ 4 ]

2 голосов
/ 07 марта 2011

Это просто неправильно;)

Вы делаете запрос UPDATE, а затем, из ниоткуда, есть подзапрос INSERT, к которому вы не можете подключиться.Я даже скажу, что есть закрывающая скобка, которая здесь не имеет ничего общего.

1 голос
/ 07 марта 2011

По сути, что-то вроде этого, вероятно:

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 */
0 голосов
/ 07 марта 2011

если вставить

  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
}
0 голосов
/ 07 марта 2011

Что вы пытаетесь сделать здесь?Опишите его в терминах бизнес-логики вашего приложения.

Похоже, вы пытаетесь вставить строку в таблицу reacted_on, а затем обновить соответствующую строку в таблице comment.Лучший способ сделать это - выполнить два запроса, один за другим.Еще лучше, оберните два запроса в транзакцию ;таким образом, если что-то пойдет не так, ваши таблицы не останутся несогласованными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...