[MySQL] Datensatz duplizieren

N0ACE

Mitglied
Schönen guten Morgen allerseits!


Ich habe den Fall, dass man einen MySQL-Datansatz über eine Weboberfläche dublizieren können muss.

Mein bisheriger Ansatz sieht folgendermaßen aus:
PHP:
<?php
	global $IN, $DB, $REGX;
	
	$id =    $DB->escape_str($REGX->xss_clean($IN->GBL('id', 'POST')));
	$table = $DB->escape_str($REGX->xss_clean($IN->GBL('table', 'POST')));

	$query = $DB->query("INSERT INTO {$table}
		SELECT * FROM {$table} AS to_copy
		WHERE to_copy.id = {$id}
		ON duplicate key
		UPDATE id = id + 1");	

	$json['entry_id'] = $DB->insert_id;


	if ($query)
	{
		$json['status'] = 'copied';
	}
	else
	{
		$json['status'] = 'error';
		$json['sql'] = $sql;
	}
	
				
	echo utf8_encode(json_encode($json));
?>

Daraufhin folgt aber folgender MySQL Error:

Code:
Error Number: 1052
Description: Unknown column 'id' in 'field list'
Query: INSERT INTO foobar
	SELECT * FROM foobar AS to_copy
	WHERE to_copy.id = 393
	ON duplicate key
	UPDATE id = id + 1


Ich könnte zwar statt des "SELECT *" ein "SELECT field_1, field_2, ... field_n" nehmen und dabei das Feld "id" aussparen, aber es wäre schon schneller + einfacher, würde man alles selektieren, da ich circa 20 verschiedene Tabellenstrukturen habe und so dann erstmal durch eine "switch/case"-Geschichte laufen müsste um den entsprechenden Query zu nutzen, da jede dieser 20 Tabellen eine andere Struktur besitzt.

Daher meine Frage: Wie bekomme ich den "SELECT *"-Query vernünftig zum laufen, sodass wirklich die komplette Zeile dubliziert wird (Ausnahme: Das "id"-Feld) ?


Vielen Dank im voraus für eure Tipps!

(PS.: Ja, ich bin mir über die Tatsache von redundanten Daten et cetera bewusst, brauche diese Funktionalität aber :) )
 
Zuletzt bearbeitet:
Hi,

Ich könnte zwar statt des "SELECT *" ein "SELECT field_1, field_2, ... field_n" nehmen und dabei das Feld "id" aussparen[...]

Das wirst Du wohl müssen, denn

If you specify ON DUPLICATE KEY UPDATE, and a row is inserted that would cause a duplicate value in a UNIQUE index or PRIMARY KEY, an UPDATE of the old row is performed.

Heißt, in dem Fall wird überhaupt keine neue Zeile eingefügt, sondern die alte geändert.

LG
 

Neue Beiträge

Zurück