2012-04-18 24 views
0

我有一張照片排名表。我想根據3列的平均值(rating1,2,3)輸出每個類別前5張照片的ID。php mysql查詢前5列的平均值

說我有以下表中的列(PHOTOID,額定值1,rating2,rating3)

$sth = mysql_query("SELECT * FROM votes ORDER BY AVG(rating1) ASC LIMIT 5") or die(mysql_error()); 

$rows = array(); 
while($r = mysql_fetch_assoc($sth)) { 
$rows[] = $r; 
} 
echo json_encode($rows); 
+1

凡在表格中的類別? – jadkik94 2012-04-18 19:09:51

+0

評分1,評分2,評分3是類別。每一行代表一名選民。 – 2012-04-18 19:19:17

回答

0
SELECT rating1+rating2+rating3 AS total FROM `test` ORDER BY total DESC 

呢?

0

默認情況下,MySql中的記錄已按升序順序返回,但您可能想要使用DESC關鍵字,而不是ASC。爲什麼你平均ratings1列,如果你想選擇前5名?

重讀這個問題,重新提交一個新答案。

$sth = "SELECT * FROM pics ORDER BY (rating1 + rating2 + rating3) desc LIMIT 5"; 
+0

每張照片可能有10個評分,我希望能夠使用所有10個評分的平均評分找到評分的最高5分。假設我有以下數據photoID 1 rating1 4; photoID 1 rating1 1; photoID 2 rating1 10; photoID 2 rating1 8.我希望輸出爲photoID 2,然後是photoID 1(即平均評分1分別是9和2.5) – 2012-04-18 20:06:24

0

你解釋你的問題的方式還不清楚,這可能是你想要什麼:

SELECT photoID, AVG((rating1+rating2+rating3)/3) as rating 
FROM votes GROUP BY photoID ORDER BY rating DESC LIMIT 5 
0
SELECT 1   AS category 
     , photoID 
     , AVG(rating1) AS avg_rating 
    FROM votes 
    GROUP BY photoID 
    ORDER BY avg_rating DESC 
    LIMIT 5 

    UNION ALL 

    SELECT 2   AS category 
     , photoID 
     , AVG(rating2) AS avg_rating 
    FROM votes 
    GROUP BY photoID 
    ORDER BY avg_rating DESC 
    LIMIT 5 

    UNION ALL 

    SELECT 3   AS category 
     , photoID 
     , AVG(rating3) AS avg_rating 
    FROM votes 
    GROUP BY photoID 
    ORDER BY avg_rating DESC 
    LIMIT 5