зацикливание оператора вставки SQL с датами обновления - PullRequest
0 голосов
/ 29 марта 2011

Что мне нужно сделать, это запустить вставить то же самое в базу данных, только изменив дату.

* 1003 т.е. *

INSERT INTO bs_events
(
    eventDate,
    eventTime,
    title,
    spaces,
    description,
    entryFee,
    payment_required,
    max_qty,
    allow_multiple
) 
VALUES (
    '2011-03-02 00:00:00',
    '10:00',
    'Carpet Cleaner 3000',
    '4',
    'This is rad',
    '25.99',
    '1',
    '1',
    '2'
)

Так что мне нужно запустить этот цикл на год, месяц или 2 года и добавить его в базу данных, но дату нужно менять каждый день

Я понятия не имею, как мне сделать сценарий для этого, поэтому любая помощь будет оценена

Спасибо

Ответы [ 3 ]

0 голосов
/ 29 марта 2011

Следующее вставит текущую дату вместо предустановленной даты.Это предполагает, что вы используете MySQL.

INSERT INTO bs_events
(
    eventDate,
    eventTime,
    title,
    spaces,
    description,
    entryFee,
    payment_required,
    max_qty,
    allow_multiple
) 
VALUES (
    DATE_FORMAT(CURDATE(),'%Y-%m-%d %H:%i:%s'),
    '10:00',
    'Carpet Cleaner 3000',
    '4',
    'This is rad',
    '25.99',
    '1',
    '1',
    '2'
);

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

DELIMITER //
CREATE PROCEDURE loopInsert()

BEGIN
    DECLARE a INT DEFAULT 0;
    myloop: LOOP
        INSERT INTO bs_events
(
    eventDate,
    eventTime,
    title,
    spaces,
    description,
    entryFee,
    payment_required,
    max_qty,
    allow_multiple
) 
VALUES (
    DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL a DAY),'%Y-%m-%d %H:%i:%s'),
    '10:00',
    'Carpet Cleaner 3000',
    '4',
    'This is rad',
    '25.99',
    '1',
    '1',
    '2'
);
        SET a = a + 1;
        IF a = 6 THEN
            LEAVE myloop;
        END IF;
    END LOOP myloop;
END//
DELIMITER ;

Тогда вы можете:

CALL loopInsert();

И будет вставлено a дней, начиная с сегодняшнего дня.Пример вставил бы 6 дней.

0 голосов
/ 29 марта 2011

Вот пример. Все это делается одним запросом.

$row = array(
    '2011-03-02 00:00:00',
    '10:00',
    'Carpet Cleaner 3000',
    '4',
    'This is rad',
    '25.99',
    '1',
    '1',
    '2'
);

$rows = array();
$end = new DateTime('2012-01-01');
for($date = new DateTime($row[0]); $date < $end; $date->modify('+1 day')) {
    $row[0] = $date->format('Y-m-d H:i:s');
    $rows[] = sprintf("('%s')", implode("','", $row));
}

$query = 'INSERT INTO bs_events
(
    eventDate,
    eventTime,
    title,
    spaces,
    description,
    entryFee,
    payment_required,
    max_qty,
    allow_multiple
) VALUES '.implode(',', $rows);

Примечание: Это работает, потому что данные строки известны ... если вы принимаете пользовательский ввод, убедитесь, что вы проверяете SQL-инъекцию.

0 голосов
/ 29 марта 2011

Вместо непосредственной вставки даты, возможно, вы могли бы использовать now(), предполагая, что это текущая дата, которую вы хотите вставить.

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