php - PHP 和 MySQL 之间的周数差异

标签 php mysql

我有以下查询。

SELECT COUNT(*), WEEK(date), YEAR(date) FROM myTable GROUP ON YEAR(date), WEEK(date)

假设它产生以下结果

32 33 2012
43 34 2012
39 35 2012
17 36 2012

我现在想要获取 2012 年第 35 周的所有 39 条记录。但是,我不希望在 WHERE 子句中使用 WEEK(date)=35 AND YEAR(date)=2012因为它不使用索引。相反,我希望找到边界并使用条件。我也不想使用 BETWEEN 因为可能会出现舍入错误。

因此,我尝试以下想法,一切都很好,但没有得到 39 条记录。显然 MySQL 和 PHP 对周的处理方式不同。我看到 MySQL WEEK() 使用模式 0、2、4 和 6,它们都返回从星期日开始的一周。理想情况下,我会拥有人们最常用的一个,最重要的是它与 DateTime 提供的相同。我该怎么做呢?谢谢

$w=35;$y=2012;   //Given
$w=sprintf('%02d',$w);    //Make sure it is two digits
$date = new DateTime($y.'W'.$w);
$d1=$date->format('Y-m-d');
$date->add(new DateInterval('P1W'));
$d2=$date->format('Y-m-d');
$sql='SELECT * FROM myTable WHERE date >= ? AND date < ?';

最佳答案

对于 MySQL 的工作方式,您的理解是正确的,与周相关的函数具有多种模式,可以产生不同的结果。 http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_week

据我了解,相当于PHP日期逻辑的MySQL模式是模式3,即ISO星期日期标准http://en.wikipedia.org/wiki/ISO_week_date

这其中的周从星期一开始,周编号为 1-53。

因此您需要使用 WEEK(date_field, 3) 来获取 PHP 兼容值。

作为一种替代方法,我发现在您需要能够灵活查询不同日期范围或聚合(Q1-Q4、H1-H2 等)的情况下,或者您可能需要使用的情况下,有一件事很方便与 PHP 支持的周不同的是在 MySQL 中使用日期辅助表(类似于数据仓库中可能用作日期维度表的表,如果您熟悉的话)。它可以为您提供一个方便的表格来连接以查找日期范围。像这样的东西应该有效:

http://databobjr.blogspot.com/2012/06/create-date-dimension-table-in-mysql.html

关于php - PHP 和 MySQL 之间的周数差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58102162/

相关文章:

mysql - NodeJs + Angular 2 CRUD JSON 解析问题

php - 无法从 localhost/xampp 发送邮件

php - 如何使用 php 比较图像相似度而不考虑比例、旋转?

php - 如何使用 php 从 mysql 中的表中获取多行...

Mysql:选择和分组依据

php - 计算从mysql到php表的不同值

php - 如何在 3 向 MYSQL 连接中检索以逗号分隔的链接 ID 列表?

php - 如何使用 php 将参数动态插入 mySQL 数据库?

mysql - 2.4 连接远程数据库

mysql - 如何将excel数据上传到mysql表中