Как делать повторяющиеся даты с php / MySQL - PullRequest
2 голосов
/ 03 августа 2011

У меня есть таблица:

table Event
- name
- description
- date (in format 2011-08-06 11:00:00)
- id

Мне нужно создать повторяющиеся события .

Как лучше всего дублировать строку св основном те же данные (имя, описание), но меняют дату?

Скажите, если у меня есть событие, которое происходит 6 августа, я хотел бы создать еще три события - 13, 20, 27 августа (каждыйСуббота)

Кроме того, что-то лучше выполняется с помощью запроса MySQL?Я предполагаю, что из-за формата даты в ... но любой совет будет оценен.

Ответы [ 2 ]

4 голосов
/ 03 августа 2011

MySQL не хватает функциональности генератора (что позволило бы создавать наборы записей произвольной длины с нуля), поэтому, если количество записей фиксировано, вы можете сделать что-то подобное:

INSERT
INTO    event (name, description, date)
SELECT  name, description, date + INTERVAL n WEEK
FROM    (
        SELECT  1 AS n
        UNION ALL
        SELECT  2 AS n
        UNION ALL
        SELECT  3 AS n
        ) q
JOIN    event
ON      id = $myid

Как видите, макет запроса зависит от количества создаваемых событий, для чистого SQL нет способа его параметризации.

Однако вы можете создать хранимую процедуру и просто вызвать INSERT в цикле:

CREATE PROCEDURE prc_fill_event (p_id INT, p_cnt INT)
BEGIN
        DECLARE _cnt INT;
        SET _cnt = 1;
        WHILE _cnt <= p_cnt DO
                INSERT
                INTO    event (name, description, date)
                SELECT  name, description, date + INTERVAL _cnt WEEK
                FROM    event
                WHERE   id = p_id;
                SET _cnt = _cnt + 1;
        END WHILE;
END
1 голос
/ 03 августа 2011

Зависит.Если это повторяющаяся дата, уходящая в бесконечность, это будет много строк для создания.Или вам придется выбрать какое-то ограничение на это, и это начинает усложнять проблему.

Возможно, было бы лучше иметь дополнительные столбцы, которые описывают повторяющиеся события, а затем отображать их соответствующим образом в слоях вида.

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