поиск событий с предыдущего воскресенья до следующего воскресенья - PullRequest
3 голосов
/ 18 мая 2011

Как найти данные MySQL за текущую неделю и следующее воскресенье?

При заданной дате (например, Wednesday 5/18/11) будут отображаться события с предыдущего воскресенья до следующего воскресенья.5/15/11 до 5/22/11.

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

Как это можно сделать?

Ответы [ 3 ]

2 голосов
/ 18 мая 2011
SELECT * 
FROM   events 
WHERE  Yearweek(`eventdate`) = Yearweek(NOW()) 
        OR ( Weekday(NOW()) = 6 
             AND Yearweek(`eventdate`) = Yearweek( 
                 DATE_SUB(NOW(), INTERVAL 1 DAY)) ) 
0 голосов
/ 19 мая 2011

Использование таблицы календаря. , .

select cal_date
from calendar
where cal_date between 
                 (select max(cal_date) from calendar
                  where cal_date <= '2011-05-15' and day_of_week = 'Sun') and
                 (select min(cal_date) from calendar
                  where cal_date > '2011-05-15' and day_of_week = 'Sun') 

Непонятно, что вы хотите, если данная дата - воскресенье. Этот предыдущий запрос возвращает 15 строк с учетом даты, которая выпадает на воскресенье. Возвращает 8 строк за все остальные дни. Вы можете настроить операторы сравнения в предложении WHERE, чтобы получить желаемое поведение.

Я разместил код для календарной таблицы ранее на SO. Это для PostgreSQL, но вы сможете без проблем адаптировать его для MySQL.

0 голосов
/ 19 мая 2011

Исходя из ответа Pentium, с некоторыми корректировками ...

SELECT
    *
FROM
    Events
WHERE
    YEARWEEK(`eventdate`) = YEARWEEK(NOW()) OR
    (
        WEEKDAY(`eventdate`) = 6 AND
        YEARWEEK(`eventdate`) = YEARWEEK(NOW()) + 1
    )

Это может потребоваться изменить в зависимости от значений для WEEKDAY (это 6 воскресенье?).

Такжехотя это должно работать, я предполагаю, что mySQL не сможет использовать какие-либо индексы для столбца eventdate с этим методом.Вероятно, лучше самим найти фактические даты для граничащих воскресений, а затем сделать ОБРАЗЕЦ или <=> =.Это должно позволить использовать индекс для даты события.Даже если у вас нет индекса сейчас, вы можете использовать его в будущем.

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