Подсчет строк в одной таблице в выражении IF - PullRequest
1 голос
/ 16 марта 2012

Можно ли проверить, равно ли num строк в таблице 0, затем выполнить вставку, все в ОДНОМ выражении sql?

Вот мой запрос, который я пробовал, но он говорит, что у меня есть синтаксическая ошибка:

$query = 
    "IF (SELECT COUNT(ID) FROM votes WHERE userid = $userid AND itemid = $itemid AND itemtype=1) = 0
        INSERT INTO votes (itemtype, itemid, userid) VALUES (1, $itemid, $userid) 
        SELECT 1 AS result
    ELSE
        SELECT 0 AS result
    END IF";

Я знаю, что бит SELECT COUNT успешно работает сам по себе.

Ответы [ 2 ]

1 голос
/ 16 марта 2012

НЕТ ИДЕИ, если это лучший способ решить эту проблему, но это сработает. По сути, это просто вызывает ошибку, если условие ложно, и поэтому предотвращает вставку:

-- make itemtype not nullable then simply insert
INSERT INTO votes SELECT
   CASE
      WHEN 
        (SELECT COUNT(ID) 
         FROM votes 
         WHERE userid = $userid AND itemid = $itemid AND itemtype=1) = 0 THEN 1
      ELSE NULL
    END CASE,
    $itemid, $userid;
0 голосов
/ 17 марта 2012

У меня нет доступа к MySQL, чтобы проверить это прямо сейчас, но сработает ли это?

INSERT INTO votes (itemtype, itemid, userid)
(SELECT  1,$itemid, $userid 
WHERE NOT EXISTS (
   SELECT * 
   FROM votes 
   WHERE itemtype=1 
   AND itemid=$itemid
   AND userid=$userid))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...