powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выбрать два последних сообщения для каждого диалога
2 сообщений из 2, страница 1 из 1
Выбрать два последних сообщения для каждого диалога
    #40033874
sc0r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите, пожалуйста, составить запрос для выбора двух последних сообщений для каждого диалога? Таблица:

+----+---------+------+------+---------+-----------+
| 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
...
Рейтинг: 0 / 0
Выбрать два последних сообщения для каждого диалога
    #40034187
sc0r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Форум мертв?
Тема больше неактуальна, можно закрыть.
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выбрать два последних сообщения для каждого диалога
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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