您好我有一些PHP代码,用于计算过去30天内数据库中的行数。问题是,如果我更改了一段代码以使数字从-30
更改为-20
,则输出数字会从272
变为360
而不是下降。
以下是代码:
$result = mysql_query("SELECT * FROM all_count WHERE DATEDIFF(date,NOW()) = -30 and member ='000002'");
$num_rows60 = mysql_num_rows($result);
答案 0 :(得分:15)
试试这个
select * from `table` where `yourfield` >= DATE_SUB(CURDATE(), INTERVAL 3 MONTH)
几天,例如,见下文。
DATE_SUB(CURDATE(), INTERVAL 15 DAY) /*For getting record specific days*/
DATE_SUB(CURDATE(), INTERVAL 1 YEAR) /*for getting records specific years*/
<小时/> 对于Anand,请查询
BETWEEN DATE_SUB( CURDATE( ) ,INTERVAL 6 MONTH ) AND DATE_SUB( CURDATE() ,INTERVAL 3 MONTH )
/* For Getting records between last 6 month to last 3 month
答案 1 :(得分:4)
比较
更好`date`< DATE(NOW() - INTERVAL 30 DAY)
而不是
DATEDIFF(date,NOW()) = -30
在第一种情况下,日期计算仅在查询开始时进行一次,数据库可以使用日期列上的任何索引。
第二个查询必须计算每一行的DATEDIFF
,并且数据库不能使用任何索引。第二个查询强制进行全表扫描。
此外,我强烈建议您不要致电您的专栏date
。是的,我知道你可以用反引号来引用这个名字,但这只是一个混乱,当你忘记时,你的语法错误将很难忘记。为列提供更具描述性的名称。这是什么日期?日期代表什么?
答案 2 :(得分:2)
您可以改用:
$result = mysql_query("SELECT * FROM all_count WHERE `date`< DATE(NOW() - INTERVAL 30 DAY) and member ='000002'");
答案 3 :(得分:0)
正如您在文档here中看到的,MySQL中的DATEDIFF
函数告诉您第一个日期到第二个日期的天数差异。
您的查询仅选择差异恰好为30天的所有行,而不是最多30天前的行。因此,完全有可能,20天前的日期行数高于30天前。你最想要的是:
SELECT * FROM all_count WHERE DATEDIFF(date,NOW()) >= -30 and member ='000002'