【问题标题】:Getting mysql result from the last 30 days [duplicate]获取过去 30 天的 mysql 结果 [重复]
【发布时间】:2012-12-09 10:46:45
【问题描述】:

可能重复:
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);

【问题讨论】:

标签: php mysql


【解决方案1】:

比较一下比较好

`date`< DATE(NOW() - INTERVAL 30 DAY)

而不是

 DATEDIFF(date,NOW()) = -30

在第一种情况下,日期计算只进行一次,在查询开始时,数据库可以使用日期列上的任何索引。

第二个查询必须计算每一行的DATEDIFF,并且数据库不能使用任何索引。第二个查询强制进行全表扫描。

另外,我强烈建议您不要将您的专栏称为date。是的,我知道您可以用反引号引用该名称,但这很麻烦,当您忘记时,您的语法错误将很难忘记。为列想出一个更具描述性的名称。什么样的约会?日期代表什么?

【讨论】:

    【解决方案2】:

    试试这个

    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
    

    【讨论】:

    • 哇,这个完全解释得很好
    • 谢谢,您的解释确实帮助我理解了区别以及应该如何做。非常感谢
    【解决方案3】:

    正如您在文档here 中看到的,MySQL 中的DATEDIFF 函数告诉您第一个日期与第二个日期的天数差异。

    您的查询仅选择差值正好为 30 天的所有行,而不选择最多 30 天前的行。因此,20 天前日期的行数完全有可能高于 30 天前。您最可能想要的是:

    SELECT * FROM all_count WHERE DATEDIFF(date,NOW()) >= -30 and member ='000002'
    

    【讨论】:

      【解决方案4】:

      你可以改用这个:

      $result = mysql_query("SELECT * FROM all_count WHERE `date`< DATE(NOW() - INTERVAL 30 DAY) and     member ='000002'");
      

      【讨论】:

      • 效果很好,谢谢
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-06
      • 2013-01-25
      • 1970-01-01
      • 2019-07-18
      • 2020-12-24
      • 2013-07-27
      • 2012-06-05
      相关资源
      最近更新 更多