【问题标题】:How can I loop-insert incremental dates into MySQL?如何将增量日期循环插入 MySQL?
【发布时间】:2013-02-18 17:32:00
【问题描述】:

如何将行添加到仅使用循环和递增日期的 SQL 的表中,例如:

INSERT INTO my_table (the_date) VALUES ('2013-04-13');
INSERT INTO my_table (the_date) VALUES ('2013-04-14');
INSERT INTO my_table (the_date) VALUES ('2013-04-15');
INSERT INTO my_table (the_date) VALUES ('2013-04-16');
...

我需要从 2013-05-07 开始的每一天插入一行,例如1000 天。

【问题讨论】:

  • 你的循环......你必须首先考虑循环的数量,然后在该表中查找最后插入的 id 并取那个日期......然后在循环中你应该求和 1那天到那个日期并进行插入;) ....你使用的是哪个 mysql 扩展??
  • 您要插入多少行?表中还有其他列吗?
  • @RobertRozas 检查编辑:)
  • @ypercube 检查编辑:)

标签: mysql sql loops


【解决方案1】:

这样的事情可以做到:-

INSERT INTO my_table (the_date)
SELECT ADDDATE('2013-04-13', INTERVAL SomeNumber DAY)
FROM (SELECT a.i+b.i*10+c.i*100+d.i*1000 AS SomeNumber FROM integers a, integers b, integers c, integers d) Sub1
WHERE SomeNumber BETWEEN 0 AND 1000

依赖于一个名为 integers 的表,它有一个名为 i 的单列,有 10 行,值从 0 到 9。

Between 子句就在那里,因此您可以限制要添加到日期的数字范围

【讨论】:

  • 确实如此,但它是一个非常有用且简单的表(允许您生成任意大的数字范围),另外意味着您可以使用单个 SQL 语句来做您想做的事情,而不是而不是循环并进行许多插入。我做了一个小的编辑,所以它可以处理 1000 天(现在只需更改 BETWEEN 子句,就可以处理 0 到 9999 天)
  • 顺便说一句,您可以避免添加额外的整数表。您可以针对返回数字 0 到 9 的子查询进行交叉连接。例如 (SELECT 0 i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION选择 9) .
【解决方案2】:

试试这个代码:

$starDate = new DateTime('2013-05-07');

for ($i=0; $i < 1000; $i++) { 
  $consulta ="INSERT INTO my_table (the_date) VALUES ('".date_format($starDate, 'Y-m-d')."');";
  $starDate = date_add($starDate, date_interval_create_from_date_string('1 days'));
  echo $consulta."</br>";
  //try somthing like mysqli_query($consulta);
}

使用 php 和 mysqli....你也可以使用纯 sql 来做到这一点;)

我给你这个办法。

感谢 ;)

【讨论】:

    猜你喜欢
    • 2021-12-12
    • 1970-01-01
    • 2015-10-13
    • 2011-07-29
    • 1970-01-01
    • 2013-07-20
    • 1970-01-01
    相关资源
    最近更新 更多