|
Выбрать два последних сообщения для каждого диалога
|
|||
---|---|---|---|
#18+
Помогите, пожалуйста, составить запрос для выбора двух последних сообщений для каждого диалога? Таблица: +----+---------+------+------+---------+-----------+ | id |group-id |user1 |user2|message|last-sender| +----+---------+------+------+---------+-----------+ Желаемый результат, чтобы последнее сообщение было всегда от пользователя(last-sender) != $_SESSION['ID'], а предпоследнее от пользователя = $_SESSION['ID']. +-------------------------------------------------------------+ | ДИАЛОГ 1 | +--------+-------------+------------------------------------+ | user1 | hello world | last-sender = $_SESSION['ID'] | +--------+-------------+------------------------------------+ | user2 | hi! :) | last-sender != $_SESSION['ID'] | +--------+-------------+------------------------------------+ +-------------------------------------------------------------+ | ДИАЛОГ 2 | +--------+-------------+------------------------------------+ | user2 | what's up? | last-sender = $_SESSION['ID'] | +--------+-------------+------------------------------------+ | user1 | sup | last-sender != $_SESSION['ID']| +--------+-------------+------------------------------------+ И я хочу вывести 20 таких диалогов в предпросмотре сообщений. Всеми способами, которыми я провобовал это реализовать, у меня не получается вывести лишь 20 диалогов на странице, т.е я пробовал вывести массив из БД, а потом уже в PHP отсортировать нужным мне образом, но как ограничить количество диалогов на странице? SQL запрос, который сейчас использую: WITH cte AS ( SELECT id, group-id, message, date, user1, user2, last-sender, new, ROW_NUMBER() OVER (PARTITION BY group-id order by id DESC) AS rn FROM table WHERE (user1 = :user1 OR user2 = :user2) AND group-id != :group-id ) SELECT id, group-id, message, user1, user2, last-sender, date, new FROM cte WHERE rn <= 2 order by group-id DESC ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2021, 16:55 |
|
|
start [/forum/topic.php?fid=47&msg=40034187&tid=1828244]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
168ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 270ms |
0 / 0 |