#mysql #sql #if-statement #subquery
#mysql #sql #if-оператор #подзапрос
Вопрос:
в таблице «чат»:
Я хотел бы удалить сообщения, если они были удалены как отправителем, так и получателем. Однако, если пользователь первым удаляет сообщение, это должно быть просто записано в разделе «deleted_by» с его идентификатором пользователя (до тех пор, пока второй пользователь также не удалит сообщение).
Для сообщения № 3 и пользователя № 1 мой запрос будет выглядеть следующим образом:
IF
(SELECT deleted_by from chat WHERE id=3) <> '1' AND (SELECT deleted_by from chat WHERE id=3) <> '0' THEN
DELETE FROM chat WHERE id=3
ELSE
UPDATE chat
SET deleted_by=1
WHERE id=3
END IF
Это должно удалить сообщение № 3, но вместо этого я получаю сообщение об ошибке. Можете ли вы помочь мне заставить мой соответствующий SQLFiddle работать?
Спасибо!
Ответ №1:
Подзапрос не нужен. Вместо этого вы можете просто удалить строку, если другой пользователь уже пометил ее удаленной, и если она все еще существует, пометьте ее удаленной:
DELETE FROM chat WHERE id = 3 AND deleted_by <> 0;
UPDATE chat SET deleted_by = 4 WHERE id = 3;
Комментарии:
1. Правильно, спасибо! Просто из любопытства: как можно получить тот же результат с помощью if …else?
2. Я думаю, для этого вам придется использовать составную инструкцию. Я ничего не делал с MySQL некоторое время, поэтому я не могу сейчас придумать рабочий пример. В любом случае, смотрите dev.mysql.com/doc/refman/5.7/en /…