Я пытаюсь получить список самых последних сообщений для пользователя, чьи данные есть. моя вкладка выглядит следующим образом:
+----------------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+---------------------+------+-----+---------+----------------+
| id | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
| sender_user_id | int(11) | NO | | NULL | |
| remote_user_id | int(11) | NO | | NULL | |
| message | longtext | NO | | NULL | |
| read | tinyint(4) | NO | | NULL | |
| created_at | timestamp | YES | | NULL | |
| updated_at | timestamp | YES | | NULL | |
+----------------+---------------------+------+-----+---------+----------------+
Создать таблицу:
CREATE TABLE `messages` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`sender_user_id` int(11) NOT NULL,
`remote_user_id` int(11) NOT NULL,
`message` longtext COLLATE utf8mb4_unicode_ci NOT NULL,
`read` tinyint(4) NOT NULL,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
Это то, что я пробовал до сих пор: SELECT sender_user_id, remote_user_id FROM messages m1 WHERE id = (SELECT MAX(m2.id) FROM messages m2 WHERE m1.sender_user_id = m2.sender_user_id AND m1.remote_user_id = m2.remote_user_id)
Что кажется близким, ноочевидно, не учитывает userId, который вы ищете, и иногда возвращает дубликаты, такие как:
MariaDB [snowdon]> SELECT sender_user_id, remote_user_id FROM messages m1 WHERE id = (SELECT MAX(m2.id) FROM messages m2 WHERE m1.sender_user_id = m2.sender_user_id AND m1.remote_user_id = m2.remote_user_id)
-> ;
+----------------+----------------+
| sender_user_id | remote_user_id |
+----------------+----------------+
| 1 | 2 |
| 2 | 1 |
| 3 | 1 |
+----------------+----------------+
3 rows in set (0.00 sec)
Первая и вторая строки являются частью одной и той же конвекции, поэтому я хотел бы только самые последниечтобы получить результаты.
Может кто-нибудь помочь мне написать SQL?
Такс