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
,即fistbyid\u user
和secondbyWEEK()
函数作为时间字段:
从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