【发布时间】:2013-05-20 01:36:56
【问题描述】:
我有一张表格,其中包含从一个用户到另一个用户的个人消息。
这是表结构:
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(或时间)排序会给出错误的顺序。
有什么想法可以让它工作吗?
【问题讨论】: