MySQL - 如何在许多现有记录中添加连续日期?

时间:2013-06-15 02:57:37

标签: php mysql date

我希望这很容易弄清楚,但显然我需要帮助。我在网上找不到答案,所以我在这里问。也许我只是没有使用正确的搜索词。

我有一个包含1100条现有记录的数据库表。有3个字段:id,code_name,code_date。 code_date是Y-m-d格式的日期,用于指示关联代码处于活动状态的日期。

我想要做的就是从今天的日期开始每个连续日期自动填充每条记录。因此,第一行将是2013-06-14,下一行将是2013-06-15,依此类推。

我觉得这应该非常简单,但显然我今天是个白痴。帮助将不胜感激!

如果我需要运行任何循环或任何东西,我可以使用PHP来帮助解决这个问题。

5 个答案:

答案 0 :(得分:6)

使用纯SQL:

set @i = unix_timestamp(date(now())) - 86400;
update thetable set code_date = date(from_unixtime(@i:=@i+86400)) order by id;

86400是一天中的秒数。

答案 1 :(得分:2)

$records = mysql_fetch_assoc(mysql_query(SELECT * FROM records_table));
$start_date = strtotime('now');

foreach ($records as $record)
       {
           $record['time'] = strtotime('+1 day' , $start_date = time());
           $start_date = $record['time'];

           mysql_query ("UPDATE records_table
                         SET time = $record['time']
                         WHERE id = $record['id']");
       }

我的strtotime功能构造可能有点偏,如果有人可以验证/编辑但是其他我相信可以完成任务。此外,如果您需要对行进行排序,那么在原始的关联数组查询中,只需添加“ORDER BY id desc”,例如,如果您想按ID按降序排序行。

答案 2 :(得分:0)

this您要找的是什么?

它是MySql中的date_add函数

答案 3 :(得分:0)

SELECT `id` FROM `table` ORDER BY `id` ASC

获取上述查询的结果并将其放入数组中,例如$ids

请参阅我曾经添加的this link

//$today = date('Y-m-d');

$sql = 'INSERT IGNORE INTO `table` (`id`, `code_date`)';
$sql .= 'VALUES ';

$values_array = array();
$i = 0;
foreach($ids as $id) {
  $values_array[] = '($id, "' . date('Y-m-d', strtotime('+' . $i . ' day') . '");
  $i++;
}
$sql .= implode(',' . "\n",$values_array);

$sql .= "\n" . 'ON DUPLICATE KEY UPDATE `code_date`=VALUES(`code_date`)';

现在您有了查询。使用mysql或PDO或其他任何方式发送它。

E.g。

$result = mysql_query($sql);

解释(如果不明显): 1.)您使用SELECT查询获得了所有现有ID。 2.)您将$today变量设置为今天的日期。 3.)使用foreach循环构造INSERT查询以增加每个id的天数。 4.)您发送查询。

如果有效,请告诉我。它应该,除非我写错字或其他一些小错误。我没有测试它。

答案 4 :(得分:0)

这应该对你有用,这可能是一种更有效的方式,但这就是我要做的。

//Get the database values
     $q = mysql_query("SELECT * FROM yourtable");
     $res = mysql_fetch_array($q);
     $date = date('Y-m-d', strtotime('now'));

 //Or you can specify like $date = date('Y-m-d', strtotime('2013-06-14'));
 //Either way

     foreach ($res as $val)
   {   
       //update the row
       mysql_query ("UPDATE yourtable
                     SET code_date = $date
                     WHERE id = $val['id']")
       //Increment date forward..
       $date = date('Y-m-d', strtotime( '+1 day' , strtotime ($date) ));


   }