|
|
|
Выбрать два последних сообщения для каждого диалога
|
|||
|---|---|---|---|
|
#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&fpage=13&tid=1828244]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
54ms |
get topic data: |
15ms |
get forum data: |
2ms |
get page messages: |
29ms |
get tp. blocked users: |
1ms |
| others: | 13ms |
| total: | 141ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...