Сортировка таблицы MySQL по количеству строк в другой таблице - PullRequest
3 голосов
/ 10 февраля 2010

Я пытаюсь отсортировать таблицу пользователей по количеству комментариев, которые они связали с ними во вторичной таблице комментариев. Я подумал, что дополнительный выбор будет лучшим инструментом, но я не могу получить правильный синтаксис.

Тестовые данные таблицы пользователей:

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 ]

3 голосов
/ 10 февраля 2010

На самом деле, нет необходимости использовать подзапрос. Вы можете использовать ПРИСОЕДИНИТЬСЯ и ЗАКАЗАТЬ ПО СЧЕТУ:

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
2 голосов
/ 10 февраля 2010

просто объединение с количеством (), а затем порядок по количеству () должен сделать это

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

* 1006-ACE *

1 голос
/ 10 февраля 2010
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
0 голосов
/ 10 февраля 2010
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 их всех.

...