获取过去30天的mysql结果

时间:2012-12-21 21:06:48

标签: php mysql

  

可能重复:
  Get from database but only last 30 days

您好我有一些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);

4 个答案:

答案 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'
相关问题