Я работаю над планировщиком транспорта. Знание MySQL (i)/PHP (очень) базовое.MySQL: Планировщик транспорта с повторяющимися задачами
Я хочу отобразить таблицу 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
И если да, то как?
Надеюсь, кто-то может мне помочь.
EDIT:
На этот раз, ежедневные и еженедельные задания запроса, как это (вероятно, до сих пор ужасно) будет делать:
(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)
Хотя, для 'два в неделю' и 'ежемесячно' INTERVAL + 2 WEEK/1 МЕСЯЦ, вернет результаты каждые неделя. Как это исправить?
EDIT:
Я не использую colums валидности в моей таблице, потому что я не знал, с истекшим сроком годности/недействительно задач прошлых. Я сменил свой ноутбук на 2040 год, и действительно была ошибка mysql. Я изменил планы, и я думаю, что лучше повторять задание на один год, с возможностью удаления или продления на другой год. Затем я забыл упомянуть, что когда я создаю задачу в понедельник с ежемесячной частотой, задача возвращается в мою таблицу в первый понедельник следующего месяца. Кроме того, задачи с частотой «один раз» появляются каждый день в моей таблице при попытке вашего решения.
EDIT
@SparKot, обычно с месячной периодичностью задача рассматривается на, например, 2013-03-05 и в следующий раз будет 2013-04-05, 2013-05-05 и скоро. Хотя в этом планировщике ежемесячная задача, установленная, например, вторник 2013-03-05, должна появиться в первый вторник следующего месяца (апрель: 2013-04-02, май: 2013-05-07, июнь: 2013-06 -04).
не у вас есть срок действия для 'повторных задач'? Что делать, если вы забыли удалить недопустимые задачи? Поделитесь табличной схемой, 'show create table planner'. – SparKot