每天写一行.mySQL


writing a row for each day. mySQL

我有一个网络表单,用户输入两个日期(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日 |游泳