让MySQL弄清楚日期间隔与PHP

时间:2011-08-26 15:35:00

标签: php mysql optimization

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

让MySQL通过像DATE_SUB(CURDATE(), INTERVAL 5 DAY) > created_at

之类的东西来做

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

4 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

在这种情况下,从性能的角度来看,我认为这不重要。您的表达式(DATE_SUB)将仅评估一次。另一点是您的web服务器和mysql服务器可以使用不同的时区,因此您可能会有不同的结果。

答案 2 :(得分:0)

我会保持最接近数据库的逻辑 - 它有更多的能力进行任何优化。还提供了更容易更改表的能力,将来更改PHP的使用(可能是java / C#...)。它还区分了beteen数据库(用于数据),PHP(用于HTML传递),Javascript(用于用户享受),CSS(用于制作漂亮的东西)

答案 3 :(得分:0)

您可以使用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() 

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