2010-08-12 29 views
2

我完全失去了應該怎麼做。MySQL:選擇一行的出現次數,然後將結果與另一個查詢結合起來

我試圖顯示前100名最喜歡的歌曲列表。我有這部分找到最受歡迎的100首歌曲:

SELECT like_song_id, COUNT(like_song_id) 
AS occurances 
FROM likes 
GROUP BY like_song_id 
ORDER BY occurances 
DESC LIMIT 100; 

這很好,我得到了正確順序的頂級歌曲列表。但我還需要其他信息,結果如下:

我需要加入song_id = like_song id上的'歌曲'表。我還需要再次在外部連接(或其他)中添加'likes'表,以查看當前用戶($ user_id(PHP))是否已經喜歡前100個列表中的任何歌曲。

我該怎麼做?

編輯:

這是最後的查詢,爲我工作,謝謝!

SELECT * 
FROM (
    SELECT like_song_id, COUNT(like_song_id) AS occurrences 
    FROM likes 
    GROUP BY like_song_id 
    ORDER BY occurrences DESC 
    LIMIT 100 
) T1 
JOIN songs ON songs.song_id = T1.like_song_id 
LEFT OUTER JOIN likes ON likes.like_song_id = T1.like_song_id AND like_user_id = 1 

ORDER BY occurrences DESC LIMIT 100 
+1

一個小問題。第100位的關係會產生任意結果 – 2010-08-12 19:09:42

回答

3

你可以試試子查詢:

SELECT * 
FROM (
    SELECT like_song_id, COUNT(like_song_id) AS occurrences 
    FROM likes 
    GROUP BY like_song_id 
    ORDER BY occurrences DESC 
    LIMIT 100 
) T1 
JOIN songs ON songs.song_id = T1.like_song id 
JOIN likes ON likes.like_song_id = T1.like_song id AND userid = 123 
相關問題