0

ゲームの好き嫌いの表があります: id, game_id, type(好き/嫌い),time

テーブルの例:画像リンク

このコードは、いいね数の多い先週のゲームを表示します。

$limit = 10;
$time = _time() - 60*60*24*7;
$games_id = array();
$games_id_query = $this->db->execQuery("SELECT `game_id`, count(*) as `likes_count` FROM `likes` WHERE `type` = 'like' AND `time` > '{$time}' group by `game_id` order by `likes_count` DESC LIMIT {$limit}");
$games_id_num = $games_id_query->num_rows;
if($games_id_num > 0) {
    while($row = $games_id_query->fetch_object()) {
        unset($row->likes_count);
        $games_id[] = (array) $row;
    }
}

このコードに追加する必要があります。もう1つ注文したいのは、このgame_id、ASCの嫌いな数になります。

どうすればいいですか?SQLのみで...どうもありがとう!

4

2 に答える 2

0

おそらく次のようなものが必要です。

SELECT `game_id`,
    SUM(IF(`type` = 'like', 1, 0)) AS likes_count,
    SUM(IF(`type` = 'dislike', 1, 0)) AS dislikes_count
FROM `likes`
WHERE `time` > '{$time}'
GROUP BY `game_id`
ORDER BY `likes_count` DESC, `dislikes_count` ASC
LIMIT {$limit}

そうは言っても、SQL に PHP 変数を直接埋め込むのではなく、準備済みステートメントとパラメーター化されたクエリを使用することを検討してください。

詳細については、この質問を参照してください: PHP で SQL インジェクションを防ぐにはどうすればよいですか?

于 2013-06-12T00:31:45.790 に答える
-1

DESC から ASC に変更します。それでよろしいですか?

  SELECT game_id, count(*) as likes_count
    FROM likes
   WHERE type = 'like'
     AND time > '{$time}'
   group by game_id
   order by likes_count ASC LIMIT {$limit}
于 2013-06-12T00:26:53.147 に答える