2

これは自分で簡単に理解できると思っていましたが、どうやら助けが必要なようです。オンラインでも答えが見つからないので、ここで質問しています。おそらく、私は適切な検索用語を使用していないだけです。

1100 の既存のレコードを持つデータベース テーブルがあります。id、code_name、code_date の 3 つのフィールドがあります。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;

864001日の秒数です。

于 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
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.) INSERTforeach ループを使用してクエリを作成し、各 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 に答える