繁体   English   中英

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

[英]MySQL - How can I add consecutive dates to many existing records?

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

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

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

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

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

使用纯SQL:

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

86400是一天中的秒数。

$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按降序排序行。

是你在找什么?

它是MySql中的date_add函数

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

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

请参阅此链接我过去添加天数。

//$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或其他任何方式发送它。

例如

$result = mysql_query($sql);

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

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

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

//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) ));


   }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM