Позволяя MySQL вычислять интервалы дат по сравнению с PHP


В среде MySQL 5.1 InnoDB, каков наилучший способ выбора данных на основе интервалов дат?

Позволяя MySQL делать это с помощью чего-то вроде DATE_SUB(CURDATE(), INTERVAL 5 DAY) > created_at

Или попросите PHP подготовить дату перед отправкой через strtotime?

Author: djdy, 2011-08-26

4 answers

Я бы сделал это с помощью запроса к MySQL. Таким образом, вы сохраняете логику выбора дат вне PHP. PHP просто обрабатывает отображение, и вы также получаете преимущество в виде небольших фрагментов данных, поступающих из базы данных.

 3
Author: Alan Delimon, 2011-08-26 15:40:34

Я не думаю, что в данном случае это имеет значение с точки зрения производительности. Ваше выражение (DATE_SUB) будет оценено только один раз. Другой момент заключается в том, что ваш веб-сервер и сервер mysql могут использовать разные часовые пояса, поэтому у вас могут быть разные результаты.

 1
Author: a1ex07, 2011-08-26 15:40:07

Я бы держал как можно больше логики ближе к базе данных - у нее больше возможностей для любых оптимизаций. Также дает возможность упростить изменение таблиц, изменить использование PHP (возможно, java/C#...) в будущем. Он также отличает базу данных beteen (для данных), PHP (для доставки HTML), Javascript (для удобства пользователей), CSS (чтобы сделать вещи красивыми)

 0
Author: Ed Heal, 2011-08-26 15:49:30

Вы можете выбрать диапазон дат с помощью 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() 

Я предпочитаю этот синтаксис, потому что он так близок к моей ментальной картине диапазонов.

 0
Author: Johan, 2011-08-26 16:27:22