我有一个网络表单,用户输入两个日期(YYYY/MM/DD)表示间隔和有关一天活动的其他信息。
示例:他选择 2013/09/12至 2013/10/02 活动:游泳
在这种情况下,我的表将如下所示:
date | activity
2013/09/12 | swimming
2013/09/13 | swimming
2013/09/14 | swimming
2013/09/15 | swimming
2013/09/16 | swimming
等等....
我必须写一行,其中包含用户提供的日期Inveral的每一天
的活动我可以在不手动迭代天数的情况下执行此操作吗?我正在使用php+mysqli
编辑:我不能使用两列作为开始和结束日期
我认为最好做两列(例如start_day和end_day)。
如果无法更改数据库构造,可以尝试以下操作:
.PHP:
$last_date = $start_date;
$ready = false;
while ($ready === false) {
$last_date = date('Y-m-d', strtotime($last_date . ' + 1 day'));+
// add $last_date to your mysql table here
if ($last_date == $stop_date) {
$ready = true;
}
}
它未经测试,但我希望它能;)
在表中使用 2 个不同的日期列;一个用于开始日期,一个用于结束日期,然后您可以将活动的开始日期和结束日期分别添加到每个列中。
我可以给你一个线索,如果你可以使用程序:
DELIMITER $$
DROP PROCEDURE IF EXISTS `dowhile_thing`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `dowhile_thing`(dt_start DATE,dt_stop DATE, thing CHAR(20))
BEGIN
DECLARE v1 INT DEFAULT 0;
CREATE TEMPORARY TABLE tmp (
`day_name` VARCHAR(256) DEFAULT NULL,
`date_change` DATE DEFAULT NULL,
thing CHAR(20)
) ENGINE=MYISAM DEFAULT CHARSET=utf8 ;
SELECT TIMESTAMPDIFF(DAY, dt_start, dt_stop)+1 INTO v1;
WHILE v1 > -1 DO
INSERT tmp (SELECT DAYNAME( ADDDATE(dt_start, INTERVAL v1 DAY) ),ADDDATE(dt_start, INTERVAL v1 DAY),thing );
SET v1 = v1 - 1;
END WHILE;
SELECT * FROM tmp;
DROP TEMPORARY TABLE IF EXISTS tmp;
END$$
DELIMITER ;
然后调用:
CALL dowhile_thing('2013-06-10','2013-06-14','swim');
结果:
day_name | date_change |东西
周六 | 2013-06-15 |游泳
星期五 | 2013年06月14日 |游泳
。