我希望这很容易弄清楚,但显然我需要帮助。我在网上找不到答案,所以我在这里问。也许我只是没有使用正确的搜索词。
我有一个包含1100条现有记录的数据库表。有3个字段:id,code_name,code_date。 code_date是Y-m-d格式的日期,用于指示关联代码处于活动状态的日期。
我想要做的就是从今天的日期开始每个连续日期自动填充每条记录。因此,第一行将是2013-06-14,下一行将是2013-06-15,依此类推。
我觉得这应该非常简单,但显然我今天是个白痴。帮助将不胜感激!
如果我需要运行任何循环或任何东西,我可以使用PHP来帮助解决这个问题。
答案 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) ));
}