【问题标题】:Best way of SELECT based on DATE in PHP/MYSQLPHP/MYSQL 中基于 DATE 的最佳选择方式
【发布时间】:2012-10-11 04:48:41
【问题描述】:

我有一个名为“entry_date”的列 DATETIME 的数据库表,例如...

ID  entry_date
1   2012-10-13
2   2012-10-14
3   2012-10-15
4   2012-10-20
5   2012-10-20
6   2012-10-21

在 PHP/MYSQL 中基于 DATE 回显结果的最佳方式是什么,所以我只得到本周的结果,所以 2012-10-15 > 2012-10-21,但显然我不能只把代码写出来,因为日子每天都在变化:) 那么你将如何在 php 中做到这一点,所以明天本周的条件将是 2012-10-16 > 2012-10-22

【问题讨论】:

  • 您的问题是什么?标题和最后一段似乎在问不同的事情。你尝试过什么?
  • 我已经编辑了问题,厌倦了更好地解释自己,我没有尝试任何东西,因为我不知道。

标签: php mysql date


【解决方案1】:

今天,使用

where date(`entry_date`) = curdate()

这个月,

where month(`entry_date`) = month(curdate()) 
and  year(`entry_date`) = year(curdate()) 

本周

WHERE `entry_date` 
BETWEEN (CURDATE() - Interval DAYOFWEEK(CURDATE()) day) 
AND (CURDATE() - Interval DAYOFWEEK(CURDATE()) day + Interval 1 week)

以上查询有助于理解。但从性能的角度来看并不好。见下面修改的一个。好多了。

SET @s:=(CURDATE() - Interval DAYOFWEEK(CURDATE()) day)
SET @e:=(CURDATE() - Interval DAYOFWEEK(CURDATE()) day + Interval 1 week)
SELECT ....  WHERE `entry_date` BETWEEN @s AND @e

这里的 DAYOFWEEK 函数返回一个从 1=Sunday 开始的整数。所以你的星期将被算作星期六作为开始日期。如果你想星期一添加 + Interval 2 day 和间隔。

也可以简化为以下。但它不支持任何一天作为一周的第一天。所以它不能移植到所有文化中。

where yearweek(`entry_date`) = yearweek(curdate())

【讨论】:

  • 今年可以加吗?
  • @CarlRydings 检查“本月”的计算方式。
  • 可能还想提一下函数WEEK,它按预期工作。
  • @VincentSavard 我忘了。但是WEEK 功能不允许您为每种文化自定义一周的第一天。它只支持周日和周一。我一周的第一天是星期六
  • 除本周以外的所有工作,我正在使用... SELECT * FROM entry WHERE entry_date BETWEEN (CURDATE() - Interval DAYOFWEEK(CURDATE()) day) AND (CURDATE() - Interval DAYOFWEEK(CURDATE())+ Interval +2 week) ...是的,我需要从星期一开始,因为我在英国,需要从星期一 15 日到星期日 21 日
猜你喜欢
  • 2013-02-28
  • 2012-08-10
  • 2012-06-07
  • 2022-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-06
  • 2018-12-08
相关资源
最近更新 更多