2

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

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

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

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

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

4

5 回答 5

6

使用纯 SQL:

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

86400是一天中的秒数。

于 2013-06-15T03:45:18.500 回答
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 以降序对行进行排序。

于 2013-06-15T03:18:34.287 回答
0

是你要找的吗?

它是 MySql 中的一个 date_add 函数

于 2013-06-15T03:04:47.823 回答
0
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.) 您INSERT使用 foreach 循环构造查询来增加每个 id 的天数。4.) 您发送查询。

让我知道这是否有效。它应该,除非我犯了错字或其他一些小错误。我没有测试它。

于 2013-06-15T03:15:47.847 回答
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) ));


   }
于 2013-06-15T03:21:31.980 回答