Forever
Новичок
Есть таблица сообщений A:
id
message (текст)
sentby (id отправителя)
sentto (id получателя)
created (дата создания)
И таблица свойств сообщений для пользователей B (одна запись на каждого участника сообщения) :
Но если пользователь оправляет сообщение самому себе, то сюда отправляется только одна запись,
id
user (id пользователя)
folder (папка сообщения)
message_id (id сообщения)
deleted (удалено ли. логическое значение)
Нужен запрос на удаление сообщений, у которых в таблице B и у отправителя и у получателя
стоит флаг deleted = 1
Все было бы просто, например:
Код:
DELETE FROM `messages` WHERE `id` IN (
SELECT `message_id`
FROM `users`
WHERE `deleted` = 1
GROUP BY `message_id`
HAVING COUNT(`message_id`) = 2
)
И сейчас в голову приходит только такое:
выбрать все сообщения не самому себе, которые удалены у обоих участников
удалить записи по ним в таблице B
Удалить сами сообщения
Код:
SELECT id FROM a WHERE `id` IN (
SELECT `message_id`
FROM b
WHERE `deleted` = 1
GROUP BY `message_id`
HAVING COUNT(`message_id`) = 2
)
DELETE FROM b WHERE message_id IN id, выбранные выше)
DELETE FROM a WHERE id IN (id, выбранные выше)
Выбрать сред них те, которые удалены
удалить записи по ним в таблице B
Удалить сами сообщения
Код:
SELECT id FROM a WHERE `id` IN (
SELECT `message_id`
FROM `b`
GROUP BY `message_id`
HAVING COUNT(`message_id`) = 1
)
SELECT id FROM a
LEFT JOIN b ON a.id = b.message_id
WHERE
a.`id` IN (id, выбранные выше)
AND b.deleted = 1
DELETE FROM b WHERE message_id IN id, выбранные выше)
DELETE FROM a WHERE id IN ( id, выбранные выше)
Помогите, пожалуйста, сократить или облегчить запросы