horoshinkin777, я тебе уже говорил, что так не проектируют таблицы, у тебя очень много индексов будет, таблица не оптимальна, не нормализована
если у тебя обычная переписка, то можно обойтись двумя полями user_id, author_id
где user_id это мой id, а author_id - id отправителя
теперь чтобы получить все переписки достаточно сделать составной индекс из 2-х полей
Все переписки where user_id = 1
все диалоги нужны группируй по author_id
Если у тебя диалоги со множеством пользователей, нужно делать еще отдельную таблицу, типа dialogs
а в messages добавить поле dialog_id
и группировать по диалогам,
в плане нормализации
https://habr.com/ru/post/254773 , вариант который я предложил с двумя участниками не прям уж очень правильный, но вполне оптимальный для работы
а то что ты придумал, прости, но это только на помойку
Добавлено через 07:07 сек.
select
*
from
`messages`
inner join
(
select
`author_id`,
max(created_at) as last_created_at
from
`messages`
where
`user_id` = 1
group by
`author_id`
)
as `latest_message`
on `messages`.`created_at` = `latest_message`.`last_created_at`
and messages.author_id = latest_message.author_id
where
`user_id` = 1
order by
`created_at` desc
Это список диалогов
Добавлено через 07:59 сек.
А это просмотр диалога
select * from `messages` where `user_id` = 1 and `author_id` = 2 order by `created_at` desc
Изменил: Вантуз-мен (28.01.2019 / 14:33)