我有一张表,其中包含从一个用户到另一个用户的个人消息。
这是表结构:
mysql> describe pms;
+---------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| time | datetime | NO | | NULL | |
| from | int(11) | NO | | NULL | |
| from_ip | int(11) | NO | | NULL | |
| to | int(11) | NO | | NULL | |
| message | varchar(255) | NO | | NULL | |
| read | tinyint(4) | NO | | 0 | |
+---------+--------------+------+-----+---------+----------------+
我正在创建一个显示特定用户 ID 的 10 个最新对话的视图。因为我想找到对话,所以我想到了使用 GROUP BY from
, to
。然而,这返回了重复的行(来自这个用户和这个用户),而且我还注意到排序不能正常工作。
为了能够正确排序结果并因此选择 10 个最新对话,组应包含组的最新行而不是第一行。
这是我尝试的查询:
SELECT *
FROM `pms`
WHERE `from` = 1
OR `to` = 1
GROUP BY `from` , `to`
ORDER BY `id` DESC
LIMIT 10
这从组中给出了错误的行,因此按 id (或时间)排序会给出错误的顺序。
有什么想法可以让它工作吗?