2011-03-29 81 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