【问题标题】:MySql order by problemMySql 按问题排序
【发布时间】:2010-03-13 00:14:43
【问题描述】:

我想按 ID 列出从其他用户组接收到特定用户的消息,并按收到的最后一条消息排序。

如果我使用这个查询:

SELECT MAX(id), fromid, toid, message 
  FROM pro_messages 
 WHERE toid=00003 
GROUP BY fromid

我没有收到从用户“fromid”发送给用户“toid”的最后一条消息,而是发送了第一条消息。我可以通过其他方式做到这一点,还是需要使用两个查询或连接表来做到这一点?

id - 消息 ID fromid - 发送消息的用户 ID toid - 接收消息的用户 id(在本例中为用户 00003)

【问题讨论】:

  • OP 已经发布了这个问题并且没有提供足够的信息。 stackoverflow.com/questions/2436342/…
  • @Sergio 请编辑您的原始问题并提供人们要求的信息。
  • 好的。我认为我无法在那里得到答案,因为我的问题没有得到很好的解释。

标签: mysql


【解决方案1】:

首先,您需要小心您的toid 值。如果将其解释为八进制数,则零填充可能会导致问题:00010 是十进制数 9,toid=9 很可能不是您想要的。

至于您的消息问题,您在 MySQL 中获得了 GROUP 运算符的正常行为。考虑下面的简化表:

mysql> select * from messages;
+------+--------+------+---------+
| id   | fromid | toid | message |
+------+--------+------+---------+
|    1 |    100 |    3 | hi      | 
|    2 |    100 |    3 | there   | 
|    3 |    100 |    3 | how     | 
|    4 |    101 |    3 | did     | 
|    5 |    100 |    3 | are you |  <--the message you want, right?
+------+--------+------+---------+

当您对fromid 进行分组时,数据库会将所有符合分组条件的行折叠成一行。在这种情况下,您的查询将得到以下结果

mysql> select max(id), fromid, toid, message from messages where toid=3 group by fromid;
+---------+--------+------+---------+
| max(id) | fromid | toid | message |
+---------+--------+------+---------+
|       5 |    100 |    3 | hi      | 
|       4 |    101 |    3 | did     | 
+---------+--------+------+---------+

请注意,现在“100”行的 max(id) 为 5,但来自 id=1 的消息。这就是 GROUP BY 操作的工作方式。您无法通过简单的查询来解决此问题,但如果您按如下方式切换到子选择,您将获得正确的结果:

mysql> select id, fromid, toid, message from messages where id in (select max(id) from messages where toid=3 group by fromid);
+------+--------+------+---------+
| id   | fromid | toid | message |
+------+--------+------+---------+
|    4 |    101 |    3 | did     | 
|    5 |    100 |    3 | are you | 
+------+--------+------+---------+

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-28
    • 2014-07-03
    • 2010-09-16
    • 2022-01-19
    相关资源
    最近更新 更多