0

写真のランキング表があります。3 つの列 (rating1、2、3) の平均に基づいて、各カテゴリの上位 5 枚の写真の ID を出力したいと思います。

次のテーブル列があるとします (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);
4

4 に答える 4

0

あなたの質問の説明が不明確でした。これはあなたが望むものかもしれません:

SELECT photoID, AVG((rating1+rating2+rating3)/3) as rating
FROM votes GROUP BY photoID ORDER BY rating DESC LIMIT 5
于 2012-04-18T19:30:59.740 に答える
0
SELECT rating1+rating2+rating3 AS total FROM `test` ORDER BY total  DESC

これ?

于 2012-04-18T19:24:43.120 に答える
0

MySql のレコードは、デフォルトで既に昇順で返されますが、DESCキーワードではなくASC. ratings1上位5つを選択しようとしているのに、なぜ列を平均しているのですか??

質問を読み直し、新しい回答を再送信します。

$sth = "SELECT * FROM pics ORDER BY (rating1 + rating2 + rating3) desc LIMIT 5";
于 2012-04-18T19:25:28.590 に答える
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
于 2012-04-18T20:39:33.317 に答える