Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 插入大量日期_Php_Sql_Mysql - Fatal编程技术网

Php 插入大量日期

Php 插入大量日期,php,sql,mysql,Php,Sql,Mysql,如何使用sql在表中插入一年或一年以上的所有日期 “我的日期”表具有以下结构 日期日期日期1 假设我想插入2009-01-01到2010-12-31(包括2009-01-01和2010-12-31)之间的日期 是否有针对上述内容的sql查询 桌子上的日期 不过,说真的,我不知道一种纯mySQL的方法可以做到这一点,但我很想看看是否有这种方法 在PHP中: $start_timestamp = strtotime("2009-01-01 00:00:00"); $end_timestamp =

如何使用sql在表中插入一年或一年以上的所有日期

“我的日期”表具有以下结构

日期日期日期1

假设我想插入2009-01-01到2010-12-31(包括2009-01-01和2010-12-31)之间的日期

是否有针对上述内容的sql查询

桌子上的日期

不过,说真的,我不知道一种纯mySQL的方法可以做到这一点,但我很想看看是否有这种方法

在PHP中:

$start_timestamp = strtotime("2009-01-01 00:00:00");
$end_timestamp =   strtotime("2009-12-31 23:59:59");

// $interval can be anything strtotime() can handle, 2 days, 1 week, 6 hours... 
$interval =        "1 day";  

$timestamp = $start_timestamp;

while ($timestamp < $end_timestamp)
 {
   $query = "INSERT INTO tablename (date_column)".
            " VALUES (".date("Y-m-d", $timestamp).");";
   echo $query."<br>";
   // execute query here....
   $timestamp = strtotime("+ ".$interval, $timestamp);
  }

你可以做一个简单的循环:

$start = mktime(12,0,0,1,1,2009);
$end = mktime(15,0,0,12,31,2009);

$values = array();
for($time = $start; $time <= $end; $time += 86400) {
    $values[] = date('Y-m-d', $time);
}

$query = "INSERT INTO dates(`date`) VALUES ('".implode("'), ('", $values)."')";

mysql_query($query);

使用存储过程的纯mysql解决方案,并重复,直到:

delimiter //

CREATE PROCEDURE insert_many_dates(number_to_insert INT)
BEGIN
  SET @x = 0;
  SET @date = '2010-01-01';
  REPEAT 
      SET @x = @x+1;
      INSERT INTO your_table(your_column) VALUES(@date);
      SET @date = DATE_ADD(@date, INTERVAL 1 day);
  UNTIL @x > number_to_insert END REPEAT;
END
//
delimiter ;
打电话

CALL insert_many_dates(1000);

我知道一个简单的查询适用于Oracle,但我不知道它是否适用于mySQL

insert into DATES_TABLE (
       select sysdate+level-1 as a_date 
       from dual 
       connect by level <= 365)
只需将sysdate替换为包含您希望开始日期的参数,并将365替换为您希望的预期天数


希望这有帮助。我没有彻底测试它的性能,但它应该非常快

实现这一点的纯MYSQL方法是:

select * from (
select  date('2009-01-01') + interval (@count := @count +  1 )-1 day d
from (select @count := 0) count
cross join (select 1 union all select 1) as two
cross join (select 1 union all select 1) as four
cross join (select 1 union all select 1) as eight
cross join (select 1 union all select 1) as sixteen
cross join (select 1 union all select 1) as thirty_two
cross join (select 1 union all select 1) as sixty_four
cross join (select 1 union all select 1) as one_two_eight
cross join (select 1 union all select 1) as two_five_six
cross join (select 1 union all select 1) as five_twelve
cross join (select 1 union all select 1) as one_thousand_twenty_four) d
where d between '2009-01-01' and '2010-12-31';

而且它的速度也非常快

你能使用任何脚本语言吗?这可能会让事情变得更简单。也许你应该用光标?在第一个循环中选择您的第一个日期,然后在插入时选择dateadd1,d,date每个交互的日期@EudeneK:你不认为这和一个简单的php脚本相比会很乏味吗?你要求对上面的内容进行sql查询。游标很容易编写,如果您打算偶尔使用它,它应该是个问题。while循环中的$end变量来自哪里?Cheers@Sarfraz,忘记在那里添加_时间戳了。更正。没有人想到关系模型说只存储实际数据,而不是空表。@Col正确和良好的观点,但OP提供的信息太少,无法说明这里正在计划什么。这可能是做OP必须做的事情的正确方式。但是,它也可能不是。如果使用两个参数来编写“开始日期”和“停止日期”,可能会更有用。或者让它选择dates表中的最后一个日期并从那里开始,也许。