2012-02-24 94 views
1

我有兩個SQL表:SQL查詢 - 如何獲得最高評價的項目?

item 
id name price 
1 name1 100 
2 name2 100 
3 name3 100 
4 name4 100 

rates 
id item_id rating 
1 1  5 
2 4  4 
3 2  5 
4 2  3 
5 3  1 
... 

而且我想要顯示3項最高平均得分。我應該怎麼做?

我得到的平均項目評分這樣的:

$item = mysql_query("SELECT * FROM item"); 
while($row = mysql_fetch_assoc($item)) { 
    $id = $row['id']; 
    $rate= mysql_query("SELECT AVG(rating) FROM rates WHERE id= $id"); 
} 

回答

4

你可以計算出平均值最高在派生表,並加入到:

select i.id, i.name, i.price 
from item i 
join (
    select id, avg(rating) as ar 
    from rates 
    group by id 
    order by ar desc, id 
    limit 3 
) dt on i.id = dt.id; 

我加id到ORDER BY強制在你有重複的情況下一致的結果。

1
$item = mysql_query("SELECT i.*, (SELECT AVG(`rating`) FROM `rates` WHERE `item_id` = i.`id`) AS `rating` FROM `item` i ORDER BY `rating` DESC LIMIT 3"); 

您是否嘗試過運行像這樣子查詢?我認爲這不是最有效或最準確的方法,但它可能會給你一個基本的結果,你可能會覺得有用。

理想情況下,你會處理這在後端消除遊戲(在標準偏差異常值),並保持存儲每個項目恆定的平均,但可能是因爲你可能需要的東西太複雜。