Помогите составить запрос

Zavus

Новичок
Есть таблица сообщений:

id
message (текст)
sentby (id отправителя)
sentto (id получателя)
created (дата создания)


И таблица свойств сообщений для пользователей (одна запись на отправителя, одна на получателя) :

id
user (id пользователя)
folder (папка сообщения)
message_id (id сообщения)
deleted (удалено ли. логическое значение)

Помогите пожалуйста составить запрос , который бы удалял сообщения, удаленные и для отправителя, и для получателя
 

WMix

герр M:)ller
Партнер клуба
Код:
SELECT id
FROM messages m
JOIN user_messages u1 ON m.id=u1.message_id AND m.sentby=u1.user AND u1.deleted
JOIN user_messages u2 ON m.id=u2.message_id AND m.sentto=u2.user AND u2.deleted
дальше цикл и удаление из каждой из табличек
 

Zavus

Новичок
Код:
SELECT id
дальше цикл и удаление из каждой из табличек
Спасибо, работает ! )

Получается, есть твой вариант, и еще я пришел к мысли о таких:

Сделать родительский ключ для message_id.
твоим запросом выбирать нужные id и по ним одним запросом удалить записи из таблицы сообщений.

Сделать родительский ключ для message_id.
Ничего не выбирая, сразу удалять вот так
DELETE m FROM messages m
JOIN user_messages u1 ON m.id=u1.message_id AND m.sentby=u1.user AND u1.deleted = 1
JOIN user_messages u2 ON m.id=u2.message_id AND m.sentto=u2.user AND u2.deleted = 1

Не делать родительскии ключ и удалять так:

DELETE m, u1, u2 (или как там пишется... ну ты понял) FROM messages m
JOIN user_messages u1 ON m.id=u1.message_id AND m.sentby=u1.user AND u1.deleted = 1
JOIN user_messages u2 ON m.id=u2.message_id AND m.sentto=u2.user AND u2.deleted = 1

хоть все это полная шляпа, но какой бы из них ты выбрал ? Какой лучше и почему?
 

AnrDaemon

Продвинутый новичок
А так создаётся темп таблица из результатов подзапроса.
 

WMix

герр M:)ller
Партнер клуба
Одно дело каскадное удаление, те задачу на чистку ты отдаешь базе, удаляя только корневой элемент, другое дело управляемое, задачу консистентности возложил на базу (restrict) а сам последовательно чистишь.
 
Сверху