Копируйте запись в MySQL

Также стоит знать, что Вы, возможно, должны включать .\ перед названием сценария. Например:

.\scriptname.ps1
5
задан Toby Allen 27 October 2009 в 20:50
поделиться

6 ответов

Наконец-то я нашел этот код. Я уверен, что это поможет людям в будущем. Итак, вот оно.

function DuplicateMySQLRecord ($table, $id_field, $id) {
  // load the original record into an array
  $result = mysql_query("SELECT * FROM {$table} WHERE {$id_field}={$id}");
  $original_record = mysql_fetch_assoc($result);

  // insert the new record and get the new auto_increment id
  mysql_query("INSERT INTO {$table} (`{$id_field}`) VALUES (NULL)");
  $newid = mysql_insert_id();

  // generate the query to update the new record with the previous values
  $query = "UPDATE {$table} SET ";
  foreach ($original_record as $key => $value) {
    if ($key != $id_field) {
        $query .= '`'.$key.'` = "'.str_replace('"','\"',$value).'", ';
    }
  }
  $query = substr($query,0,strlen($query)-2); # lop off the extra trailing comma
  $query .= " WHERE {$id_field}={$newid}";
  mysql_query($query);

  // return the new id
  return $newid;
}

Вот ссылка на статью http://www.epigroove.com/posts/79/how_to_duplicate_a_record_in_mysql_using_php

12
ответ дан 18 December 2019 в 13:16
поделиться

Параметры:

  1. Избегайте использования подстановочного знака * и укажите все столбцы самостоятельно. Но вы говорите, что таблица, как ожидается, изменится в будущем, и это не подходящее решение для вашего случая.

  2. Изучите столбцы из текущего определения таблицы (используя DESCRIBE или запрос INFORMATION_SCHEMA.COLUMNS ). Используйте эту информацию о метаданных для построения запроса, опуская столбец первичного ключа с автоинкрементом.

  3. Выполните запрос SELECT * , извлеките строку обратно в приложение, а затем удалите столбец с автоинкрементом. от него. Затем используйте этот кортеж для создания оператора INSERT .

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

1
ответ дан 18 December 2019 в 13:16
поделиться

Как насчет копирования строк во временную таблицу, а затем обратно в таблицу клиентов? Я думаю, что это заставит mysql присвоить ему новый идентификатор автоинкремента, особенно со второй версией отправленного вами запроса.

0
ответ дан 18 December 2019 в 13:16
поделиться

Если вы знаете имя столбца первичного ключа в своей таблице (и я предполагаю, что вы знаете, потому что он в любом случае находится в предложении where), я думаю, вы могли бы сделать это:

Edit - я забыл, что MySQL не поддерживает select ... into. Вместо этого это должно сработать

create new_table 
select * 
from   customer
where  customerid = 9181 

alter table new_table 
drop column customerid

insert into customer
select  null, *
from    new_table

drop table new_table
0
ответ дан 18 December 2019 в 13:16
поделиться

А что насчет

insert into test.abc select null, val1, val2 from test.abc where val2 = some_condition;

Похоже, у меня так работает. Замените вашу таблицу, поля, условие, конечно.

Нулевое значение позволяет БД генерировать автоматически увеличивающийся ID для вас.

1
ответ дан 18 December 2019 в 13:16
поделиться

На данный момент два сообщения, и вот третий вариант: в PHP динамически определять поля в вашей таблице. Или вы можете составить список полей, которые вы «жестко запрограммируете», и поддерживаете вручную, чтобы отображать таблицу. В вашем результирующем запросе не будут использоваться *.

0
ответ дан 18 December 2019 в 13:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: