【问题标题】:Letting MySQL figure out date intervals vs. PHP让 MySQL 找出日期间隔与 PHP
【发布时间】:2011-08-27 00:27:22
【问题描述】:

在 MySQL 5.1 InnoDB 环境中,根据日期间隔选择数据的最佳方法是什么?

让 MySQL 通过 DATE_SUB(CURDATE(), INTERVAL 5 DAY) > created_at 之类的方式来完成它

或者让PHP在提交前通过strtotime准备好日期?

【问题讨论】:

    标签: php mysql optimization


    【解决方案1】:

    我会通过对 MySql 的查询来做到这一点。这样,您就可以在 PHP 之外保留选择日期的逻辑。 PHP 只处理显示,您还可以从数据库中获得较小数据块的优势。

    【讨论】:

      【解决方案2】:

      在这种情况下,从性能的角度来看,我认为这并不重要。您的表达式 (DATE_SUB) 将只计算一次。还有一点就是你的webserver和mysql server可以使用不同的时区,所以可能会有不同的结果。

      【讨论】:

        【解决方案3】:

        我会尽可能多地保留最接近数据库的逻辑 - 它有更多的能力进行任何优化。还可以更轻松地更改表,将来更改 PHP(可能是 java/C# ...)的使用。它还区分了 beteen 数据库(用于数据)、PHP(用于 HTML 交付)、Javascript(用于用户享受)、CSS(使事情变得漂亮)

        【讨论】:

          【解决方案4】:

          您可以使用BETWEEN ... AND ...选择日期范围

          SELECT * FROM table1 t1 WHERE now() BETWEEN t1.startdate AND t1.enddate
          

          SELECT * FROM table1 t1 
          WHERE t1.somedate BETWEEN DATE_SUB(now(),INTERVAL 1 DAY) AND now() 
          

          我更喜欢这种语法,因为它非常接近我心中的范围。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-12-17
            • 1970-01-01
            • 2011-09-12
            • 1970-01-01
            • 2011-06-12
            • 2012-09-05
            • 1970-01-01
            • 2011-07-20
            相关资源
            最近更新 更多