У меня есть MySQL таблицы, содержащие сообщения:MySQL: Создание списка разговоров (последние сбще в/из user_id)
id (INT)
sender_id (INT)
recipient_id (INT)
sent_time (INT)
read_time (INT)
body (TEXT)
Мне нужно получить список самого последнего пользователя сообщений X, полученные от или отправить другими (отдельными) пользователями.
Другими словами, я хотел бы создать полный список разговоров с другими пользователями, отсортированных по отправленному сообщению последнего сообщения, обмениваемого с данным пользователем. Конечный результат (обрабатывается в PHP) будет нравится, как это:
array (
array (other_user_1_id, last_msg_sent_time, last_msg_is_read,
last_msg_is_to_me/from_me, number_of_messages*),
array (other_user_2_id, ...)
)
*) number_of_messages
не является обязательным, но довольно неплохо иметь.
Вопрос: Как мне это сделать наиболее эффективно? Создайте отдельную таблицу «разговоры» и обновите ее каждый раз, когда кто-либо отправляет или читает сообщение или создает один, но сложный запрос в таблице «сообщений»? Если последний, как будет выглядеть запрос?
Или вариант третьего варианта - создайте дополнительный столбец, содержащий идентификатор первой строки беседы. Таким образом, мы могли бы сделать SELECT * WHERE sender_id = '$ uid' ИЛИ recipient_id = '$ uid' GROUP BY first_id ORDER BY sent_date DESC. Эй, еще лучше - я могу добавить еще один столбец, содержащий последовательный номер данного сообщения в разговоре между этими двумя пользователями. Пока нет удалений, он должен работать достаточно хорошо.:) Любые мысли по этому поводу? – Mike
просто удалите ваши обновления таблиц ... индексирование CRUCIAL в этом, хотя очень важно ... я работаю с большим количеством транзакций, и все это помогло мне – parkman47
Я бы даже не подумал об этом без индексации , Огромная, огромная разница, я знаю. :) Спасибо большое! – Mike