powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выборка последних сообщений от и к пользователю
4 сообщений из 4, страница 1 из 1
Выборка последних сообщений от и к пользователю
    #39617039
vipTelnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть такая таблица
http://prntscr.com/itcugr

Как составить запрос так что б он показал только последние сообщения от и к пользователю с user_id = 44
что б на выходе лстались запси с id 8,6,3,2
...
Рейтинг: 0 / 0
Выборка последних сообщений от и к пользователю
    #39617350
artas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vipTelnet,

Код: plsql
1.
2.
select * from table t1 
join (select to_user_id, from_user_id, max(created) as created from table group by to_user_id, from_user_id) t2 on t1.to_user_id = t2.to_user_id and t1.from_user_id = t2.from_user_id and t1.created =t2.created 


примерно так должно работать
...
Рейтинг: 0 / 0
Выборка последних сообщений от и к пользователю
    #39617525
vipTelnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я таки сделал не знаю правильно или можно было как то сократить
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select t1.* from userMessage as t1, userMessage as t2 
WHERE  t1.created IN (select max(t2.created) from userMessage as t2 
where t2.to_user_id = 44 OR t2.from_user_id = 44 group by t2.to_user_id, t2.from_user_id)
AND t1.to_user_id IN (select t2.to_user_id from userMessage as t2 
where t2.to_user_id = 44 OR t2.from_user_id = 44 group by t2.to_user_id, t2.from_user_id)
AND t1.from_user_id IN (select t2.from_user_id from userMessage as t2 
where t2.to_user_id = 44 OR t2.from_user_id = 44 group by t2.to_user_id, t2.from_user_id)
group by t1.id  ORDER BY `t1`.`created` DESC


Если у кого есть идеи как сделать лучше пишите
...
Рейтинг: 0 / 0
Выборка последних сообщений от и к пользователю
    #39617651
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FAQ: Выборка первой/последней записи в группах .

В данном случае первое/последнее берётся по полю даты-времени, группа - это группа по ( LEAST(from_user_id, to_user_id), GREATEST(from_user_id, to_user_id) ), а условие отбора WHERE ( (from_user_id=44) + (to_user_id=44) ) > 0. Для ускорения можно попробовать UNION ALL двух подзапросов, один с
Код: sql
1.
from_user_id=44

, второй с
Код: sql
1.
to_user_id=4

4 соответственно - отбираем первые/последние как в подзапросах, так и в суммарном запросе... пусть получится монстр, но это должен получиться достаточно эффективный монстр.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выборка последних сообщений от и к пользователю
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]