【问题标题】:MySQL ORDER BY highest number of rows in another table [duplicate]MySQL ORDER BY 另一个表中的最高行数[重复]
【发布时间】:2012-10-04 17:40:07
【问题描述】:

可能重复:
MySQL ORDER BY total rows of user in another table

我有 5 个用户(在桌子上 users):

User ID (uid) | User Name (uname)
-----------------------------------
1               Fallon
2               Jeremy
3               Matt
4               Peter
5               John
  • 到目前为止,Fallon (uid 1) 已登录 35 次。
  • Jeremy 登录 32 次。
  • Matt 登录了 57 次。
  • Peter 登录了 43 次。
  • John 登录了 23 次。

日志详细信息存储在另一个表中 (logs):

Log ID (logid) - User ID (uid)

现在我想按最多登录时间的顺序表示一个用户列表。登录次数最多的用户将位于顶部,登录次数第二多的用户将排在第二位。喜欢:

  1. Matt 登录了 57 次。
  2. Peter 登录了 43 次。
  3. Fallon 登录了 35 次。
  4. Jeremy 登录 32 次。
  5. John 登录了 23 次。

因为日志存储在一个表中,而用户详细信息存储在另一个表中。我怎样才能,我应该使用什么查询来制作像上面这样的列表。请帮忙。

【问题讨论】:

    标签: php mysql sql


    【解决方案1】:

    这只是一个涉及JOIN的简单查询:

    SELECT users.uid, users.uname, COUNT(logs.logid) AS logins 
      FROM users 
      LEFT JOIN logs ON logs.uid=users.uid 
      GROUP BY users.uid
      ORDER BY logins DESC
    

    【讨论】:

    • @tadman 。 . .请添加组,以便您的答案可以被投票。不仅是您的第一个,而且您是唯一使用正确连接语法的答案。
    • 完成!没想到我错过了。
    • 谢谢。有效。我没有想到我的代码不起作用的 GROUP BY。非常感谢兄弟。 :)
    【解决方案2】:

    未经测试,但我相信这应该可行:

    SELECT u.`uid`, u.`uname`, COUNT( l.`logid` ) AS count 
    FROM `users` AS u, `logs` AS l 
    WHERE u.`uid` = l.`uid` 
    GROUP BY l.`uid` 
    ORDER BY count DESC
    

    【讨论】:

      【解决方案3】:
        SELECT users.uid, users.uname, COUNT(logs.logid) as logins 
        FROM users, logs 
        where  logs.uid=users.uid 
        GROUP BY logs.uid
        ORDER BY logins DESC
      

      【讨论】:

        猜你喜欢
        • 2012-09-25
        • 1970-01-01
        • 2014-02-23
        • 1970-01-01
        • 2013-09-20
        • 2011-12-20
        • 1970-01-01
        • 2014-03-03
        • 1970-01-01
        相关资源
        最近更新 更多