2010-02-09 3 views
3

사용자 테이블을 보조 주석 테이블에서 몇 개의 코멘트에 연결했는지에 따라 사용자 테이블을 정렬하려고합니다. 하위 선택이 최고 일 것이라고 생각했습니다. 도구를 사용했지만 올바른 구문을 가져올 수 없습니다.다른 테이블의 행 수를 기준으로 mysql 테이블 정렬

사용자 테이블 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 

올바른 방향으로 밀어 넣기가 될 것이다 극단적으로 도움이되는, 고마워! =)

답변

3

사실 서브 쿼리를 사용할 필요가 없습니다. 당신은이 수를 가입하고 ORDER 사용할 수 있습니다

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

이것은 트릭 =) 건배! – moodh

2

단지가

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

-ace

+0

건배! 그 트릭을 했어 =) – moodh

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 모두를 추가 할 수 있습니다.

+0

결국 부차적 인 것을 필요로하지 않았다. 어쨌든 덕분이다. =) – moodh

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 
+0

감사합니다. 거의 동일한 솔루션 =) – moodh