在MySQL 5.1 InnoDB环境中,根据日期间隔选择数据的最佳方法是什么?
让MySQL通过像DATE_SUB(CURDATE(), INTERVAL 5 DAY) > created_at
或者让PHP在提交前通过strtotime
准备日期?
答案 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()
我更喜欢这种语法,因为它非常接近我对范围的心理描述。