[英]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.