I have a table and I want to duplicate specific rows in the table. I know this is not the best way to do things but we are looking for a quick solution.
Here’s something harder than I initially thought, all I need to do is copy an entire record to a new record in an auto-increment table in MySql without the need to specify each field. This is because the table can change in future and might break duplication. I will be duplicating MySQL records from PHP.
It is a problem because in a ‘SELECT * ‘ query MySql will try to copy the ID of the record being copied which genenerates a duplicate ID error.
This blocks out:
INSERT INTO customer SELECT * FROM customer WHERE customerid=9181
. It also blocks out INSERT INTO customer (Field1, Field2, ...) SELECT Field1, Field2, ..... FROM customer WHERE customerid=9181.
Is there a way to do this from PHP or MySQL?
Advertisement
Answer
I finally found this code. I am sure it will help people in the future. So here it is.
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; }
Here is the link to the article http://www.epigroove.com/posts/79/how_to_duplicate_a_record_in_mysql_using_php