簡體   English   中英

如何在SQL中運行此查詢?

[英]How should I run this query in SQL?

我在游戲中有喜歡/不喜歡的表:id,game_id,類型(喜歡/不喜歡),時間

表示例:圖像鏈接

這段代碼給了我最近一周喜歡的游戲,按喜歡的次數排序:

$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將是第一名,游戲Y將是第二名。

非常感謝你 !

添加一個星期的列,並按降序按該列對其進行排序。

像這樣

SELECT game_id
       ,DATEPART(wk, likeDate)
       ,count(*) as `likes_count`
FROM   likes 
WHERE  typ = 'like' 
AND    time > '{$time}' 
group by
       game_id
       ,DATEPART(wk, likeDate)
order by 
       2 DESC 
LIMIT  {$limit}

您需要使用一種情況:

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中的計算。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM