根据另一个表中的行数对mysql表进行排序

时间:2010-02-09 21:29:54

标签: mysql syntax count subquery

我正在尝试根据他们在辅助注释表中链接到多少注释来对用户表进行排序,我认为子选择将是最好的工具,但我无法使语法正确。

用户表testdata:

id | user_id
1  | 1000
2  | 1001
3  | 1002

评论表testdata

id | link_id
1  | 1002
2  | 1000
3  | 1002
4  | 1000
5  | 1002
6  | 1001
7  | 1000
8  | 1002

第一个表中的预期排序结果为:

id | user_id
3  | 1002
1  | 1000
2  | 1001

任何正确方向的推动都会非常有帮助,谢谢! =)

4 个答案:

答案 0 :(得分:3)

实际上,不需要使用子查询。您可以使用JOIN和ORDER BY计数:

SELECT 
    users.user_id, COUNT(comments.id) as total_messages
FROM 
    users
INNER JOIN 
    comments ON comments.link_id = users.id
GROUP BY 
    user_id
ORDER BY 
    COUNT(comments.id) DESC

答案 1 :(得分:2)

只是一个带有计数()的连接,然后按计数()的顺序应该这样做

select c.id, user_id, count(*) from user u, comments c where u.id = c.id group by id, user_id

-ace

答案 2 :(得分:1)

SELECT
    u.id,
    u.user_id
    COUNT(u.id) link_count
FROM
    Users u,
    Comment c
WHERE
    c.link_id = u.user_id
ORDER BY
    link_count
GROUP BY
    u.id,
    u.user_id

答案 3 :(得分:0)

SELECT u.id, u.user_id
FROM users u
JOIN ( SELECT link_id, COUNT(*) cnt FROM comment GROUP BY link_id ) c
  ON ( c.link_id = u.user_id )
ORDER BY c.cnt DESC

这样您就可以添加users中的其他列,而无需group by全部列。