php - 按周时间分组的记录计数

标签 php mysql

假设我有这个 numrequest 表。它具有以下字段:idid_usertime(时间戳)

我想计算按周分组的特定 $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/

相关文章:

php - CMS 应该用于摄影师作品集网站吗?

php/mysql - 记录用户 Activity 和巨大的数据库负载

php - 按键中的字符串对数组值进行分组?

php - 在数据库中转换/保存用户提交的 "Time"

mysql - 如何将记录选择为单个记录以确定时间差

python - 使用pymysql插入表

php - 大型 MySQL INSERT 语句导致 PHP 错误

mysql - 编写 MySql 查询以在一个字段中查找某些值并替换另一个字段值的正确方法

php - 限制php中的文本长度并提供 'Read more'链接

php - codeigniter 返回从 Controller 获取数据以通过 Ajax 请求查看