【问题标题】:MySQL ORDER BY total rows of user in another tableMySQL ORDER BY 另一个表中用户的总行数
【发布时间】:2012-09-25 16:18:42
【问题描述】:

假设,我想显示一个用户列表,按他们发送的最多消息数排序。

我有 2 张桌子:UsersMessages

我有 10 个用户

用户 A 发送了 20 条消息(在 Messages 表中有 20 行)

SELECT * FROM messages WHERE user='A'


User B sent 17 msgs    
User C sent 19    
User D sent 13

等等。

我想要一个查询,该查询将按照用户发送的总消息的顺序列出用户。喜欢:

1. A (20 msgs)
2. C (19 msgs)
3. B (17 msgs)
4. D (13 msgs)

我很努力,但找不到任何查询来执行此操作。请帮忙。提前致谢。

【问题讨论】:

标签: php html mysql sql


【解决方案1】:
SELECT user, COUNT(*) FROM messages GROUP BY user ORDER BY count(*) DESC;

【讨论】:

  • 正在输入答案,然后就出现了。无需继续,这就是你的答案。
  • 是的,我讨厌这种情况;)
  • 使用上述查询时只给出一行。预期的行为是它应该按 count(*) 获得所有结果
  • 不,它没有。您做错了什么,或者您的数据可能只有一个 user 值。
【解决方案2】:

如果你想打印名字加入用户表,

select user_name, count(*) from users inner join messages m on users.userid=m.messageid group by userid order by count(*) desc;

【讨论】:

    【解决方案3】:

    您可以使用alias 进行排序:

    SELECT user, COUNT(1) as cnt
    FROM Messages 
    GROUP BY user 
    ORDER BY cnt DESC;
    

    position:

    SELECT user, COUNT(1) as cnt
    FROM Messages 
    GROUP BY user 
    ORDER BY 2 DESC;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-18
      • 1970-01-01
      相关资源
      最近更新 更多