Intereting Posts
Ошибка MySQL при вставке данных, содержащих апострофы (одинарные кавычки)? PHP DateTime (): отображает длительность более 24 часов, но не как дни, если они больше 24 часов извлекать и вставлять изображение в базу данных с помощью php Будет ли PDO laststatment-> fetchAll (PDO :: FETCH_COLUMN, столбец $) повторно запускать запрос на каждый вызов? Задайте значение переменной в одной функции и используйте в других функциях при вызове непосредственно из ссылки в codeigniter jQuery-скрипт плагина wordpress не работает в содержимом, загруженном через ajax Получите значение URL-адреса после последней косой черты Как сделать Aptana отображает цвета Laravel в файлах .php (поддержка Laravel)? Перегрузка класса поставщика symfony2 для установки параметра curl verify_peer в значение false PHP – Сравнение времени Сделать изображения закрытыми в WordPress Преобразование XML в CSV с помощью PHP, с разными полями в некоторых itens PHP получает фактический максимальный размер загрузки языковой перевод в php получить ширину экрана в javascript-переменную и отправить ее через ajax на php-страницу, чтобы избежать загрузки страницы

Дублировать запись в MySQL

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

Вот что-то сложнее, чем я изначально думал, все, что мне нужно сделать, это скопировать всю запись в новую запись в таблицу автоматического увеличения в MySql без необходимости указывать каждое поле. Это связано с тем, что таблица может измениться в будущем и может нарушить дублирование. Я буду дублировать записи MySQL из PHP.

Это проблема, потому что в запросе «SELECT *» MySql попытается скопировать идентификатор копируемой записи, которая генерирует дублируемую идентификационную ошибку.

Это блокирует: INSERT INTO customer SELECT * FROM customer WHERE customerid=9181 . Он также блокирует INSERT INTO customer (Field1, Field2, ...) SELECT Field1, Field2, ..... FROM customer WHERE customerid=9181.

Есть ли способ сделать это с PHP или MySQL?

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

 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

Как насчет

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

Кажется, так работает для меня. Замените свой стол, поля, состояние, конечно.

Значение null позволяет БД генерировать идентификатор автоинкремента для вас.

Опции:

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

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

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

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

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

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

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

Изменить – я забыл, что MySQL не поддерживает select … in. Это должно работать вместо этого

 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