假设我有这个 numrequest
表。它具有以下字段:id
、id_user
、time
(时间戳)
我想计算按周分组的特定 $id_user
的记录。
我知道如何统计一段时间内的记录。
$past=time()-$totalSecondsInAweek
$query='SELECT COUNT(1) as counta
from numrequest
WHERE time >'.$past.'
AND WHERE id_user='.$id_user;
但是如何做到这一点,以便自第一次输入有关特定$id_user
以来每周计数
最佳答案
我的主要疑问(可能与问题本身无关)是你为什么要这样做?
$past=time()-$totalSecondsInAweek WHERE time >'.$past.'
您是否只想获取最近 7 天的记录?
如果是这种情况,请在您的 sql 代码中尝试以下操作:
哪里时间 > date_sub(curdate(), INTERVAL 7 DAY)
在我的解决方案中,我将删除此条件,因为我不理解它,而且我无法将其链接到按周分组。
现在,给你答案。我敢打赌,您不想只按周分组。您想要按对(年-周)分组。如果您不执行此操作,则会将两个日期分组到第 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
这是一个example
如果您只想将年份和周放在一列中,您可以尝试此操作(我认为这比 CONCAT(year, week) 更快):
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
这是一个example
注意:如果您希望周数从 0 开始或选择是否从星期一或星期日开始,请查看官方 documentation .
希望这有帮助。
关于php - 按周时间分组的记录计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9189977/