Если…ELSE с подзапросом в MySQL

#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 /…