[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: облегчить запросы:)
Raymond
Есть таблица сообщений 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 `B`
WHERE `deleted` = 1
GROUP BY `message_id`
HAVING COUNT(`message_id`) = 2
)


Если бы не тот факт , что для сообщений самому себе в таблице B одна запись.

И сейчас в голову приходит только такое:

выбрать все сообщения не самому себе, которые удалены у обоих участников
удалить записи по ним в таблице 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, выбранные выше)


Но это же, как бы, жесть полная.
Помогите, пожалуйста, сократить или облегчить запросы
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.