Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.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 计数按时间周分组的记录_Php_Mysql - Fatal编程技术网

Php 计数按时间周分组的记录

Php 计数按时间周分组的记录,php,mysql,Php,Mysql,假设我有这个numrequest表。它有以下字段:id,id\u user,time(时间戳) 我想按周对特定$id\u用户的记录进行计数。 我知道如何数一段时间的记录 $past=time()-$totalSecondsInAweek $query='SELECT COUNT(1) as counta from numrequest WHERE time >'.$past.' AND WHERE id_user='.$

假设我有这个
numrequest
表。它有以下字段:
id
id\u user
time
(时间戳)

我想按周对特定
$id\u用户的记录进行计数。
我知道如何数一段时间的记录

  $past=time()-$totalSecondsInAweek

  $query='SELECT COUNT(1) as counta
          from numrequest
          WHERE time >'.$past.'
          AND WHERE id_user='.$id_user;
但如何做到这一点,使其从关于特定
$id\u用户的第一次输入开始每周计数,您可以使用该函数。您的查询:

  $query='SELECT id_user, weekofyear(time) as `week`, COUNT(1) as counta
          from numrequest
          WHERE time >'.$past.'
          AND WHERE id_user='.$id_user.'
          GROUP BY id_user, weekofyear(time)';
您可以一次查询多个用户:

  $id_user = '1,2,3,4,5';
  $query='SELECT id_user, weekofyear(time) as `week`, COUNT(1) as counta
          from numrequest
          WHERE time >'.$past.'
          AND WHERE id_user in ('.$id_user.')
          GROUP BY id_user, weekofyear(time)';

您必须使用带有两个谓词的
groupby
,即fistby
id\u user
和secondby
WEEK()
函数作为时间字段:

从numrequests中选择id\u user,COUNT(*),其中time>id\u user的某个日期组,WEEK(time)

这是正确的,如果您不是为单个用户搜索结果,如果在这种情况下您需要设置
WHERE
谓词

$past=time()-$totalSecondsInAweek

$query='SELECT COUNT(1) as counta
      from numrequest
      WHERE time >'.$past.' AND id_user='.$id_user 
      GROUP BY WEEKOFYEAR(time);

这会得到你想要的…

我的主要疑问,可能与问题本身无关,就是你为什么要这样做

$pass=time()-$totalSecondsInAweek 其中时间>'.$past'

您是否仅尝试获取过去7天的记录

如果是这种情况,请在sql代码中尝试:

WHERE time>date\u sub(curdate(),间隔7天)

在我的解决方案中,我将删除此条件,因为我不理解它,而且我无法将其链接到按周分组

现在,回答你的问题。我敢打赌,你不会只想每周分组。您希望按一对分组(年-周)。如果您不这样做,您将在第0周分组两个日期:“2011-01-01”和“2012-01-01”。因此,我假设您希望以这种方式显示以前的数据:

Year | Week | Count(*)
----------------------
2011 | 0    | 1
2012 | 0    | 1
而不是:

Week | Count(*)
---------------
0    | 2
下面是SQL代码:

select
    id_user,
    year(time) as AYear, week(time) as AWeek,
    count(*) as TotalPerWeek
from n1
where id_user = 'tim'
group by id_user, AYear, AWeek
order by AYear, AWeek
这是一个

如果你想把年和周只放在一列中,你可以试试这个(我认为比CONCAT(年,周)快):

这是一个

注意:如果你想让你的周数从0开始,或者选择是从周一还是周日开始,请咨询官方


希望这能有所帮助。

我的例子正是您所描述的。我还在学习。你的密码正是我想要的。多谢各位。我有个小问题。
time
字段的值可以是Unix时间戳吗?不用担心,我使用了
NOW()
MySQL时间函数来存储日期/时间,工作正常。我真的很感谢你的帮助。
select
    id_user,
    year(time) * 100 + week(time) as YearWeek,
    count(*) as TotalPerWeek
from n1
where id_user = 'tim'
group by id_user, YearWeek
order by YearWeek