Может быть коряво, но тем не менее. Суть в следующем: Существует таблица БД(MySQL).Условно назовем ее OLD одно из полей - какое-то событие (показ фильма, отправление автобуса... не важно). Событие может быть периодическим, может ежедневным, может происходить только по вторникам и пятницам, а может в любые произвольные даты (не обязательно только в одну) Цель всего этого: Вывод чего - то типа расписания. то есть при выборе даты смотреть, какие из событий попадают на эту дату. Внимание, вопрос! Как ? Как это сделать с наименьшими затратами. Что приходит в голову: Ну заведу я еще одно поле в таблице OLD типа enum, ну пропишу туда буковки регулярности. Типа A - ежедневное, B - по конкретным дням недели, С - по конкретным датам. как мне еще в одной таблице NEW хранить эти даты? Ну привяжу я id записи OLD в качестве поля второй таблицы(NEW). но как мне сделать хранение в NEW этих дат? Видимые минусы - Для ежедневных событий придется делать массу записей (типа на каждый день). Для событий периодичностью 1-2-3 раза в неделю записей, естественно будет поменьше, но все равно, коробит меня от этого(. Может кто подскажет, в каком направлении копать? ЗЫ. Копал и до обеда и после ((((
А зачем для периодических событий записи в таблицу NEW добавлять? Даты в таблицу NEW добавляй только для событий, которые будут запланированы на конкретную дату. Для периодических событий придется сделай запросу по таблице OLD, для непериодических по левому соединению OLD с NEW.
Напиши функцию от даты, возвращающую либо истину либо ложь для каждого из периодических событий на каждую дату Select OLD.[Периодическое событие] WHERE Функция(OLD.[Периодическое событие],[ДАТА]) = 1 UNION ALL Select OLD.[Непериодическое событие] FROM OLD join NEW on OLD.[Непериодическое событие] = NEW.[Непериодическое событие] WHERE DATA = ДАТА И никаких левых соединений
Йожкин_Кот, Примерно так и думал). НО, некошерно, как-то, получится, ежели в OLD будет событие, происходящее шесть раз в неделю((( Собственно, ищу более экономный алгоритм)
bivshii, пойду RTFM )). Но в общем, направление поиска понятно. сенкс добавлено через 1 минуту bivshii, трудно объяснить. душой чувствую, что литр, а словами пока затрудняюсь)
по структуре я бы сделал так: добавил таблицу Shedule, в которой такие поля: NEW_id (идентификатор записи в NEW) EventType (1 - периодически, 2 - по дням, 3 - в опред. дату) day1 (время запуска задания в понедельник) day2 (...) day3 day4 day5 day6 day7 datetimerun (однократный запуск) interval (интервал для периодического расписания, например через каждые 48 часов или 15 минут) Т.о. получается некоторая избыточность, но что гораздо важнее меньше записей в таблице. Плюс одному событию может соответсвовать несколько расписаний. Например, отправление автобуса состоится по вторникам в 14.20 и по субботам в 15.30, а также дополнительный рейс 12 декября в 13.00. Это будет две записи в таблице Shedule.
с наименьшими затратами, думаю, это можно сделать в календаре-планировщике. в Mozilla Sunbird, вроде, всё это было.