2010-05-03 95 views
1

我剛剛建立了一個網站,並意識到我需要有一個前3名評分最高的專輯..我沒有建立一些跟蹤評級的東西。評分分開存儲。有人可以告訴我如何把它們放在一起。幫助MySQL加入聲明

SELECT ID,名字從專輯限時3

選擇等級評級從其中URL = CONCAT(相冊/顯示/',album.id)

讓我割肉出來一點。我需要找回以下內容:

來自相冊表。 ID,名稱。從收視表中我需要找回平均評分。 ROUND((評分+評分+評分)/總評分)

評分。用戶可以對我網站上的所有內容進行評分,因此我有一個通用評級表評分與它所應用的網頁的網址一起存儲。因此,要獲得專輯評分,我需要「專輯/演出/ {album_id}」。在後面我應該有一個類型和ID字段,但現在有點晚,午餐iminient。

任何幫助,非常感謝。

+1

你可以添加相冊ID的收視率表的事情嗎?這會讓你的加入**更有效率。 'CONCAT'('albums/show /',a.id)'在連接中會導致性能下降 – lexu 2010-05-03 11:18:55

回答

2
SELECT 
    a.id, 
    a.name, 
    AVG(r.rating) AS average 
FROM 
    albums a 
    LEFT JOIN 
    ratings r 
    ON 
    r.url = CONCAT('albums/show/', a.id) 
GROUP BY 
    a.id 
ORDER BY 
    average DESC 
LIMIT 3 

(未經測試,見AVG()

+0

Genius,非常感謝你+1 – JasonS 2010-05-03 11:20:55

+0

@JasonS非常歡迎你。考慮將ID和「參考名稱」(例如,「專輯」)重構爲「收視率」表以優化查詢。另外,如果還沒有3個評級的專輯,可以考慮在'ORDER'子句中附加',a.id DESC'以強制二級排序。 – jensgram 2010-05-03 11:23:50