Позволяя MySQL вычислять интервалы дат по сравнению с PHP
В среде MySQL 5.1 InnoDB, каков наилучший способ выбора данных на основе интервалов дат?
Позволяя MySQL делать это с помощью чего-то вроде DATE_SUB(CURDATE(), INTERVAL 5 DAY) > created_at
Или попросите PHP подготовить дату перед отправкой через strtotime
?
4 answers
Я бы сделал это с помощью запроса к MySQL. Таким образом, вы сохраняете логику выбора дат вне PHP. PHP просто обрабатывает отображение, и вы также получаете преимущество в виде небольших фрагментов данных, поступающих из базы данных.
Я не думаю, что в данном случае это имеет значение с точки зрения производительности. Ваше выражение (DATE_SUB
) будет оценено только один раз. Другой момент заключается в том, что ваш веб-сервер и сервер mysql могут использовать разные часовые пояса, поэтому у вас могут быть разные результаты.
Я бы держал как можно больше логики ближе к базе данных - у нее больше возможностей для любых оптимизаций. Также дает возможность упростить изменение таблиц, изменить использование PHP (возможно, java/C#...) в будущем. Он также отличает базу данных beteen (для данных), PHP (для доставки HTML), Javascript (для удобства пользователей), CSS (чтобы сделать вещи красивыми)
Вы можете выбрать диапазон дат с помощью 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()
Я предпочитаю этот синтаксис, потому что он так близок к моей ментальной картине диапазонов.