【问题标题】:Returning Rows from MySql less than 60 Days Old从 MySql 返回少于 60 天的行
【发布时间】:2011-09-29 13:45:11
【问题描述】:

我有以下查询返回表中的所有行:

$query="SELECT * FROM $tbl_name ORDER BY job_id DESC";

我想将这些结果限制为 60 天以内的条目。我使用以下方法记录输入数据库的日期:

$dt=date('d M Y');

这存储在名为“日期”的列中。

有人可以帮我修改我的查询吗?

谢谢 丹

【问题讨论】:

标签: php mysql sql datetime select


【解决方案1】:

如果日期在数据库中像 varchar 一样存储,您的查询应该是:

SELECT * 
FROM $tbl_name 
WHERE TO_DATE(date, 'dd MON yyyy') >= DATE_SUB(CURDATE(), INTERVAL 60 DAY)
ORDER BY job_id DESC

如果日期像日期一样存储,请使用:

SELECT * 
FROM $tbl_name 
WHERE date >= DATE_SUB(CURDATE(), INTERVAL 60 DAY)
ORDER BY job_id DESC

【讨论】:

    【解决方案2】:
        $query="SELECT * FROM $tbl_name WHERE DATEDIFF(CURDATE(), STR_TO_DATE(date,'%d %M %Y')) <60 ORDER BY job_id DESC"
    

    【讨论】:

    • 谢谢,但遗憾的是这不起作用。它不会返回错误,但不会过滤结果。可能是因为当 CURDATE 是 YYYY MM DD 格式时,我以 'd M Y' 格式存储数据?
    • 您是将日期存储在日期字段还是 varchar 中?
    • 如果您将日期作为字符串(在 varchar 或文本字段中)存储在数据库中,我的最后一次编辑应该可以工作
    • 嗨,Daniel,它以 varchar 形式存储,您的编辑非常有用。非常感谢。丹
    • 您应该将日期存储在日期字段(日期时间数据类型)中。这使得操作、比较、排序等变得更加容易。如果你想为用户很好地显示它,那么你可以在 PHP 中轻松地对其进行格式化。
    【解决方案3】:
    SELECT * FROM $tbl_name FROM_UNIXTIME(date) >= DATE_SUB(CURDATE(), INTERVAL 60 DAY) ORDER BY job_id DESC
    

    【讨论】:

      【解决方案4】:

      试试这个(未经测试)

      SELECT * FROM $tbl_name WHERE date >= DATE_SUB(CURDATE(), INTERVAL 60 DAY) ORDER BY job_id DESC
      

      【讨论】:

      • 谢谢,但如上所述,遗憾的是这不起作用。它不会返回错误,但不会过滤结果。可能是因为当 CURDATE 是 YYYY MM DD 格式时,我以 'd M Y' 格式存储数据?
      【解决方案5】:

      你可以作为

      select  b.mobile_number, max(b.bill_number), max(b.created_on), c.name from MasterBill as b, MasterCustomer as c  WHERE b.created_on < NOW() - INTERVAL 60 DAY and b.mobile_number = c.mobile_number group by mobile_number;
      

      认为手机号码是与客户主数据和计费的关键绑定数据。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多