пытаюсь организовать на сайте обмен сообщениями между пользователями. В таблице usermessage есть столбцы Код (Text): id nomer from to message date new 10 message4d723556164f34d7235561650d 2 1 привет! 03.10.2011 18:03 yes организую выборку так: Код (Text): "SELECT um.id, um.nomer, um.title, um.message, um.`date`, um.new, u.login, u.id as user_id, u.avatar FROM usermessages AS um INNER JOIN users AS u ON um.`from` = u.id WHERE (um.from = 1 AND um.to=2) OR (um.from = 2 AND um.to=1) ORDER BY um.id DESC"; Все хорошо, но вот когда один пользователь удаляет сообщение у себя, оно естественно удаляется и у другого пользователя. Как нужно переделать таблицу, чтобы при удалении сообщения одним пользователем, у другого сообщение оставалось бы.
jenya777777 ну и какие есть предположения по этому вопросу? если это разные сообщения, удаляться и храниться должны у разных людей независимо, то что еще тут думать? =)
Предположим я сделаю 2 записи в таблицу [sql] id nomer from to message date new 10 message4d723556164f34d7235561650d 2 1 привет! 03.10.2011 18:03 yes 11 message4d723556164f34d7235561650d 1 2 привет2! 03.10.2011 18:03 yes [/sql] В таком случае, каким образом мне составить запрос на выборку данных. При этом запросе [sql] "SELECT um.id, um.nomer, um.title, um.message, um.`date`, um.new, u.login, u.id as user_id, u.avatar FROM usermessages AS um INNER JOIN users AS u ON um.`from` = u.id WHERE (um.from = 1 AND um.to=2) OR (um.from = 2 AND um.to=1) ORDER BY um.id DESC"; [/sql] мне выводится те сообщения получаются дублируются
jenya777777 Сделать 2 таблицы 1) Messages - id, from, to, text 2) Messages_deleted id, message_id, user_id Когда первый удалил - добавляем строку во 2 таблицу, второй удалил - еще одну строку во 2 таблицу. Также можно сделать таблицу Messages_readed аналогично Messages_deleted Запрос писать не буду - он элементарен. INNER JOIN второй таблицы
igordata Можно и флаги. Почему такой подход был - нужна была возможность отправлять сообщения группам пользователей. Т.е. в id получателя мог лежать id группы. Тут уже флагами не обойтись))
Сделал как посоветовал tommyangelo, создал две таблицы, а выборку не могу додуматься как сделать. Подскажите пожалуйста!
Зах таблицы плодить? А почему бы не сделать в 1 таблице что то типо: 1) Messages - id, from, to, text, del1, del2 Получаем: 23 - 2 - 3 - Привет - 1 - 0 т.е от кого пришло удалил. получатель не удалил. Если удаляет тот кому пришло то получится 1 - 1 и можно смело чистить
Я тебя из движка одного могу пример показать PHP: //------------------------------------------------ // Delete message //------------------------------------------------ if ( $delete1 || $delete2 ) { $DB->query("DELETE FROM " . DB_PREFIX . "messages WHERE ".($folder == 1 ? "member_id2='" . $SESSION->conf['member_id'] . "'" : "member_id1='" . $SESSION->conf['member_id'] . "'")." AND message_id='$id' LIMIT 1"); } elseif ( $folder == 1 ) { $DB->query("UPDATE " . DB_PREFIX . "messages SET delete2=1 WHERE member_id2='" . $SESSION->conf['member_id'] . "' AND message_id='$id' LIMIT 1"); } elseif ( $folder == 2 ) { $DB->query("UPDATE " . DB_PREFIX . "messages SET delete1=1 WHERE member_id1='" . $SESSION->conf['member_id'] . "' AND message_id='$id' LIMIT 1"); }
Но это вроде просто параметры на удаление delete1 и delete2 ставятся =) придумай там условие если у delete1 значение = 1 то удалять полностью. как то так =)
SELECT * FROM messages INNER JOIN messages_deleted ON messages.id = messages_deleted.message_id WHERE messages.to = $user_id AND messages_deleted.user_id != $user_id
Вот скриншоты таблиц http://s52.radikal.ru/i137/1103/6f/2899002e6c8e.jpg и http://s59.radikal.ru/i166/1103/9d/b9dc0633b072.jpg