2011-03-29 84 views
0

我需要做的是將相同的東西插入數據庫中,只更改日期。循環更新日期的SQL插入語句

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年,並把它添加到數據庫中,但日期需要改變每一天

我有不知道我如何去製作一個腳本來做到這一點所以任何幫助,將不勝感激

感謝

+1

你正在使用哪些DBMS? – johnny 2011-03-29 11:51:09

+1

即時通訊使用cPanel,因爲即時通訊不太確定如何使用MySQL安裝oracle – Simon 2011-03-29 11:55:01

+0

?然後在mysql – Harish 2011-03-29 11:58:18

回答

0

下面是一個例子。它在一個查詢中完成。

$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

我將如何運行此腳本?即時通訊使用MySQL – Simon 2011-03-29 12:19:15

0

而不是插入日期直接,也許你可以使用now(),假設它是你想插入的當前日期。

+0

中使用NOW()函數,這意味着我必須每天都運行它? – Simon 2011-03-29 11:53:17

+0

是的,但我認爲你仍然這樣做? – Belinda 2011-03-29 11:54:57

+0

如果您使用的是Windows,您也可以使用計劃的taks來每天運行腳本。最簡單的方法是創建一個快捷方式並每天執行此操作。這意味着您的電腦需要始終打開。我認爲更好的選擇是使用cron,因爲它可以在服務器上運行。大多數基於Unix的主機都默認安裝了cron,我相信 – 2011-03-29 12:11:21

0

以下內容將插入當前日期而不是預設日期。這假定你正在使用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

我怎麼會循環它雖然每個循環增加日期1天 – Simon 2011-03-29 12:14:25

+0

您可以創建一個存儲過程循環和插入儘可能多從今天開始使用這個: – 2011-03-29 12:35:48

+0

我試過這個,但我得到的錯誤:解析錯誤:語法錯誤,意外的T_STRING在第4行的/home/fevsdiet/public_html/diycarpetcare.co.uk/booking/loop2.php – Simon 2011-04-05 10:25:38