php - MySQL 选择并计算日期范围 : Doesn't work crossing the month barrier

标签 php mysql select count date-range

你能告诉我为什么这样有效吗:

$customer_data_date14daysAgo = mysql_query("SELECT COUNT(*) AS count 
FROM tableName WHERE datetime BETWEEN '$date14daysAgo%' and 
'$dateToday%' ") or die(mysql_error()); 

但这不是吗?

$customer_data_date30daysAgo = mysql_query("SELECT COUNT(*) AS count 
FROM tableName WHERE datetime BETWEEN '$date30daysAgo%' and 
'$dateToday%' ") or die(mysql_error());

PHP:

$dateToday = date ( 'Y-M-d', strtotime ( '-0 day' . $date ) );   
$date14daysAgo = date ( 'Y-M-d', strtotime ( '-14 day' . $date ) );   
$date30daysAgo = date ( 'Y-M-d', strtotime ( '-1 month' . $date ) );   

$dateToday = 2010 年 10 月 28 日
$date14daysAgo = 2010 年 10 月 21 日
$date30daysAgo = 2010 年 9 月 28 日

唯一的区别是第二个查询跨越了 9 月 - 10 月的障碍。

如果我手动将日期设置为 2010 年 10 月 1 日直到今天 - 它有效
但如果从 2010 年 9 月 30 日到今天 - 它就会停止工作

谢谢!

最佳答案

如果您想要搜索一个月前直到当前日期的数据,也许这会有所帮助:

SELECT COUNT(*) AS count FROM table 
WHERE date BETWEEN DATE_SUB(CURRENT_DATE(),INTERVAL 1 MONTH) AND CURRENT_DATE()

如果你想显示1个月前(不包括当前日期),你可以使用:

SELECT COUNT(*) AS count FROM table 
WHERE date <= DATE_SUB(CURRENT_DATE(),INTERVAL 1 MONTH)

但如果我没有误解的话。

<小时/>

按照您的问题,尝试如下:

$customer_data_date30daysAgo = mysql_query("SELECT COUNT(*) AS count 
FROM tableName WHERE datetime BETWEEN '".$date30daysAgo."%' and 
'".$dateToday."%' ") or die(mysql_error());

关于php - MySQL 选择并计算日期范围 : Doesn't work crossing the month barrier,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4048384/

相关文章:

php - 如何合并数组中的匹配字符串?

php - Doctrine 2 多对多级联

php - 多用户 - 拖放

php - 为什么MySQL中会发生这种数据类型转换?

java - AsyncTask 不返回任何响应

mysql - 计算 SQL 中的空字段或 null 字段

javascript - 根据用户在下拉列表中的选择是否与公司数据属性匹配来过滤/隐藏 div

jquery - IE 的鼠标悬停选项

php - 解析大型 XML 数据

php - 使用php导出mysql数据库数据