MySQL. Как добавить последовательные даты для многих существующих записей?

Я надеялся, что этого будет достаточно легко разобраться, но, видимо, мне нужна помощь. Я не могу найти ответ онлайн, так что я спрашиваю здесь. Возможно, я просто не использую правильные условия поиска.

У меня есть таблица базы данных с 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», например, если вы хотите упорядочить строки по идентификатору в порядке убывания.

это то, что вы ищете?

его функция date_add в MySql

Это должно сработать для вас, возможно, более эффективным способом, но я так и сделаю.

 //Get the database values $q = mysql_query("SELECT * FROM yourtable"); $res = mysql_fetch_array($q); $date = date('Ym-d', strtotime('now')); //Or you can specify like $date = date('Ym-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('Ym-d', strtotime( '+1 day' , strtotime ($date) )); } 
 SELECT `id` FROM `table` ORDER BY `id` ASC 

Получите результаты вышеуказанного запроса и поместите его в массив, например $ids .

См. Эту ссылку, которую я использовал для добавления дней.

 //$today = date('Ym-d'); $sql = 'INSERT IGNORE INTO `table` (`id`, `code_date`)'; $sql .= 'VALUES '; $values_array = array(); $i = 0; foreach($ids as $id) { $values_array[] = '($id, "' . date('Ym-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. 2.) Вы устанавливаете переменную $today сегодняшней. 3.) Вы INSERT запрос INSERT используя цикл foreach, чтобы увеличить количество дней для каждого идентификатора. 4.) Вы отправляете запрос.

Дай мне знать, если это работает. Должно быть, если я не сделал опечатку или какую-то другую мелкую ошибку. Я не проверял.