2010-05-19 103 views
2

我不確定將這個問題發送給我的最佳方式。Mysql:按第二個表中的匹配行數排序結果

表A具有以下的列:

  • ID
  • 名稱
  • 描述

表B具有以下的列:

  • ID
  • A_ID(外鍵表A)
  • IP_ADDRESS
  • 日期

基本上表B包含每次用戶從表A瀏覽量行的行

我的問題是怎麼做的我排序表A的結果的基礎上,匹配行於表B.

SELECT * 
    FROM TableA 
ORDER BY (SELECT COUNT(*) 
      FROM TableB 
      where TableB.a_id = TableA.id) 

謝謝!

+0

你現在的查詢有什麼問題? – 2010-05-19 21:20:45

+1

哇。我將該查詢寫爲僞代碼,但實際上並未考慮對其進行測試。從來沒有想過它會實際工作,但我只是測試它,它的作品就像一個魅力! – KyleT 2010-05-19 21:24:59

回答

3
SELECT a.* 
     , b.cnt 
     FROM TableA a 
    LEFT OUTER JOIN (SELECT a_id 
         , COUNT(*) cnt 
         FROM TableB b 
        GROUP BY a_id) b 
    ON a.id = b.a_id 
    ORDER BY b.cnt 
+1

注意:如果它們在TableB中沒有行,則省略結果中的行。 – 2010-05-19 21:07:40

+1

@Mark Byers - 修正。 – dcp 2010-05-19 21:08:35

+0

感謝所有人的回答。謝謝dcp,這個工作就像一個魅力! – KyleT 2010-05-19 21:20:42

0

像這樣的東西可以做到這一點。

select a.id, a.name, a.description, count(b.id) as count 
    from TableA as a 
    inner join TableB as b on a.id = b.a_id 
    group by a.id, a.name, a.description order by count 
+1

注意:如果TableB中沒有行,則會省略結果中的行。 – 2010-05-19 21:07:02

0

您的查詢已經做了你想要的東西。您可能要添加DESC如果你想與行人數最多的第一行:

SELECT * FROM TableA 
ORDER BY (SELECT COUNT(*) FROM TableB where TableB.a_id = TableA.id) DESC 
0
SELECT a.id, a.name, a.description, count(b.id) FROM TableA a 
    JOIN TableB b on b.a_id = a.id 
GROUP BY a.id, a.name, a.description ORDER BY COUNT(b.id); 

您可以添加一個DESC在ORDER BY,或許這就是你需要:

SELECT a.id, a.name, a.description, count(b.id) FROM TableA a 
    JOIN TableB b on b.a_id = a.id 
GROUP BY a.id, a.name, a.description ORDER BY COUNT(b.id) DESC; 
相關問題