Я работаю над транспортным планировщиком. Мои знания MySQL(i)/PHP (очень) базовые.
Я хочу отобразить таблицу HTML со всеми задачами определенного дня. Но проблема в том, что некоторые задачи нужно повторять (пока я не удалю всю задачу), поэтому у задач есть частота: один раз, ежедневно, еженедельно, раз в две недели и ежемесячно.
Так что, конечно, когда я добавляю новую задачу в понедельник с еженедельной периодичностью, эта задача должна возвращаться в мою таблицу каждый понедельник.
Должен ли я комбинировать что-то вроде:
SELECT * FROM planner
WHERE frequency = `once`
AND date = CURDATE()
SELECT * FROM planner
WHERE frequency = `daily/weekly/two-weekly/monthly/yearly`
AND day = DAYOFWEEK(CURDATE())
AND date + INTERVAL 1 DAY/1 WEEK/2 WEEK/1 MONTH
И если да, то как тогда?
Надеюсь, кто-нибудь может мне помочь.
ИЗМЕНИТЬ:
На этот раз для ежедневных и еженедельных задач подойдет такой запрос (вероятно, все еще ужасный):
(SELECT *
FROM planner
WHERE frequency = 'once'
AND date = NOW())
UNION
(SELECT *
FROM planner
WHERE frequency = 'daily'
AND date + INTERVAL 1 DAY)
UNION
(SELECT *
FROM planner
WHERE frequency = 'weekly'
AND day = DAYOFWEEK(CURDATE())
AND date + INTERVAL 1 WEEK)
Хотя для "две недели" и "ежемесячно" ИНТЕРВАЛ + 2 НЕДЕЛИ / 1 МЕСЯЦ будут возвращаться результаты каждую неделю. Как это исправить?
ИЗМЕНИТЬ:
Я не использую столбцы достоверности в своей таблице, потому что я не знал о просроченных/недействительных прошлых задачах. Я изменил год своего ноутбука на 2040, и действительно была ошибка mysql. Я изменил планы, и я думаю, что лучше, чтобы повторяющаяся задача была действительна в течение одного года с возможностью удаления или продления еще на один год. Затем я также забыл упомянуть, что когда я создаю задачу в понедельник с месячной частотой, задача возвращается в мою таблицу в первый понедельник следующего месяца. Также задачи с частотой «один раз» появляются в моей таблице каждый день, когда я пробую ваше решение.
ИЗМЕНИТЬ
@SparKot, обычно с ежемесячной периодичностью задача просматривается, например, 2013-03-05, а в следующий раз будет 2013-04-05, 2013-05-05 и так далее. Хотя в этом планировщике поставлена ежемесячная задача, например, вторник 2013-03-05 должен снова появиться в первый вторник следующего месяца (апрель: 2013-04-02, май: 2013-05-07, июнь: 2013-06- 04).
repeating tasks
? Что делать, если вы забыли удалить недействительные задачи? Пожалуйста, поделитесь схемой таблицы,show create table planner
. - person SparKot   schedule 04.03.2013