2012-04-18 6 views
0

私は写真のランキングのテーブルを持っています。 3つの列の平均(rating1,2,3)に基づいて各カテゴリの上位5枚の写真のIDを出力したいと思います。 カラムの上位5つの平均のPHP mysqlクエリ

は、私は、次の表の列(PHOTOID、rating1、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

+0

評価1、評価2、評価3がカテゴリです。各行は有権者を表します。 –

答えて

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

これを持って言いますか?

0

MySqlのレコードは既定では既に昇順で返されていますが、ASCではなくDESCというキーワードを使用することをお勧めします。トップ5を選択しようとしている場合は、なぜratings1列を平均化していますか?

質問を再入力し、新しい回答を再送信してください。あなたの質問を説明し

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

写真ごとに10の評価があるかもしれませんが、私はすべての10の評価の平均を使用して評価の最高5を見つけたいと思います。次のデータがあるとします。photoID 1 rating1 4;写真ID 1評価1 1;写真ID 2評価1 10; photoID 2 rating1 8.出力がphotoID 2、photoID 1になるようにしたい(平均評価1はそれぞれ9と2.5です) –

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