0

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

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

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

$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;
    }
}

このクエリを作成して、先週取得した同類のみで注文したいと思います。

例: ゲーム X のいいね数が 5 で、ゲーム Y のいいね数が 6 で、ゲーム X が今週 3 いいね、ゲーム Y が今週 2 いいねの場合 - ゲーム X が 1 位になり、ゲーム Y が 2 位になります。

どうもありがとうございます !

4

2 に答える 2

0

CASE を使用する必要があります。

SELECT `game_id`, COUNT(*) AS `likes_count` 
FROM `likes` 
WHERE `TYPE` = 'like' AND `TIME` > '{$time}' 
GROUP BY `game_id` 
ORDER BY COUNT(CASE WHEN `TIME` >= CURRENT_TIMESTAMP - INTERVAL '7' DAY END) DESC 
LIMIT {$limit}

あなたの DBMS は MySQL のようですが、INTERVAL 演算と ORDER での計算の両方をサポートしています。

于 2013-08-17T15:11:46.757 に答える