Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我应该如何在SQL中运行此查询?_Php_Sql_Sql Order By - Fatal编程技术网

Php 我应该如何在SQL中运行此查询?

Php 我应该如何在SQL中运行此查询?,php,sql,sql-order-by,Php,Sql,Sql Order By,我在游戏中有喜欢/不喜欢的表格:id,游戏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`

我在游戏中有喜欢/不喜欢的表格:id,游戏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将是第二个


非常感谢

为week添加一列,并按该列的描述顺序进行排序

像这样的

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,因为它同时支持区间算术和顺序计算。

您能解释一下您在这里做了什么吗?我不知道什么是datepart,什么是order by 2Datepart从任何日期开始计算周/年/日。按2排序是按第二列对结果排序。您可以在简单的选择中尝试这一点,例如选择周
selectdatepart(wk,getdate())
选择年
selectdatepart(yy,getdate())
您得到了什么结果?你能公布预期和实际结果吗?好的,我明白了。您的查询已返回基于$time的上周计数。你想要什么,所有喜欢的人的数量,但排序为上周喜欢的人?然后只需从WHERE条件中删除AND
time
>“{$time}”。