0

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

$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-Oct-28
$date14daysAgo = 2010-Oct-21
$date30daysAgo = 2010-Sep-28

唯一的区别是第二个查询跨越了 Sep - Oct 障碍。

如果我手动将日期设置为 2010 年 10 月 1 日到今天 - 它可以工作
但如果它的 2010 年 9 月 30 日到今天 - 它停止工作

谢谢!

4

3 回答 3

1

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

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());
于 2010-10-29T01:55:08.673 回答
1

MySQL 不喜欢给出带有月份名称的日期(例如“2010-Oct-28”)。推荐的格式都是这样的数字:2010-10-28。

因此,当您调用php date 函数时,请以该格式请求它:

$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-10-28

这应该会让你的 SQL 工作得更好。

于 2010-12-18T12:30:44.583 回答
0

刚刚写了一篇文章如何处理日期。它还包括 MySQL 的代码示例:

http://use-the-index-luke.com/sql/where-clause/obfuscation/dates

于 2010-12-18T12:51:34.250 回答