MySQL: как получить «дату этой недели», используя текущую дату? - PullRequest
0 голосов
/ 21 июля 2009

У меня есть SQL-запрос о получении 5 событий сегодня:

SELECT n.nid, n.type, n.title, nr.body, nr.teaser, FROM_UNIXTIME(e.event_start) start_date, FROM_UNIXTIME(e.event_end) end_date
FROM node n
LEFT JOIN event e ON n.nid = e.nid
LEFT JOIN node_revisions nr ON nr.nid = e.nid
WHERE n.`type` = 'event'
AND NOW() BETWEEN FROM_UNIXTIME(e.event_start) AND FROM_UNIXTIME(e.event_end)
ORDER BY n.`created` DESC
LIMIT 5

Тогда мне нужно получить «событие этой недели», используя «неделю, которая включает« сегодня »и начинается в воскресенье».

Как я могу это сделать в MySQL?

Любая помощь будет принята с благодарностью. Заранее спасибо:)

Ура, Mark

Ответы [ 4 ]

7 голосов
/ 21 июля 2009

Вы должны определить «эту неделю» лучше - вы имеете в виду 7-дневное скользящее окно с центром на сегодня или неделю (которая включает «сегодня»), начиная, например. в воскресенье? Это полностью зависит от семантики «этой недели», и мы не можем решить, что вы имели в виду под этим неоднозначным выражением. Из двух упомянутых вами подходов один или другой (или вариант по нему) будут подходящими в зависимости от вашего значения.

Редактировать : ФП пояснил в комментарии, что он имеет в виду «неделю, которая включает« сегодня »и начинается в воскресенье» - и из его использования FROM_UNIXTIME я делаю вывод, Диалект SQL, на который он нацелен, - MySQL. Тогда WEEK(somedate, 0) - это функция MySQL, которая должна дать ему именно то, что он хочет, см. документы mysql .

В частности,

AND WEEK(CURDATE, 0) BETWEEN WEEK(FROM_UNIXTIME(e.event_start), 0)
                         AND WEEK(FROM_UNIXTIME(e.event_end), 0)

должно быть предложением WHERE, которое ищет OP.

1 голос
/ 21 июля 2009

Я не уверен, что это для SQL Server или MySQL, но в MySQL вы можете получить текущий день недели сегодня и затем использовать date_add , чтобы вычесть это количество дней из текущая дата (дата начала), затем, используя дату начала, снова используйте date_add , чтобы добавить 7 дней (дата окончания).

Надеюсь, это поможет, дайте мне знать, если вам нужна помощь с синтаксисом.

0 голосов
/ 21 июля 2009

Я не знаю, есть ли у вас такая опция, но из соображений производительности может быть лучше выполнить вычисления даты в программном коде. Если вы используете функцию для столбца в предложении WHERE, MySQL не может использовать индексы. Простой пример: http://netfactory.dk/2004/12/13/mysql-date-functions-and-indexes/ Большинство языков должны иметь приличные функции / библиотеки для манипулирования датой / временем.

0 голосов
/ 21 июля 2009

Судя по именам таблиц / столбцов, вы работаете с Drupal. Рассматривали ли вы использование View для достижения своей цели? Я не могу сказать из контекста, является ли это частью модуля, который вы пишете, в этом случае продолжайте подключаться, или вы просто хотите, чтобы список событий отображался в блоке, и в этом случае представление должно быть в состоянии чтобы сделать все это для вас без возни с PHP / SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...