MySql : dupliquer une enregistrement

WRInaute passionné
Salut à tous et bonnes fêtes à tous

Un peu occupé ces derniers temps, je reviens avec une question assez pointue (à première vue non, mais vu ce que j'ai fouiné et pas trouvé de solution, donc oui ^^) :

Je veux dupliquer un enregistrement MySql (v 5.0.44) d'une table action qui a un champ primaire id en autoincrement.
Je veux bien sûr que l'id soit modifié dans le nouveau tuple.
Une condition obligatoire est que je n'ai pas à réécrire tous les champs de ma table (près d'une centaine)

j'ai tout essayé, y compris de passer par une table temporaire, sans succès.

Merci de m'éclairer par vos lanternes étoilées :-)

Yves
 
WRInaute accro
Et faire ça en PHP ? Un select pour récupérer les infos puis un insert de ces mêmes données (sans l'id, de manière à ce qu'il 'auto-incrémente de son côté) me semble bien suffisant, non ?
 
WRInaute impliqué
J'ai pas testé mais est-ce que le code suivant ne conviendrai pas ?

Code:
$sql = "SELECT * FROM table1 WHERE id='5'";
$result = mysql_fetch_assoc(mysql_query($sql));

unset($result['id']);

$sql_fields = implode(',', array_keys($result));
$sql_values = "'" . implode("','", array_map('mysql_real_escape_string', $result)) . "'";

$sql = "INSERT INOT table2 ({$sql_fields}) VALUES ({$sql_values})";
mysql_query($sql);
 
WRInaute impliqué
rudddy a dit:
@seebz, merci je vais tester même si je t'avoue que je n'ai pas tout compris.

Yves

Y a une faute de frappe dans mon code mais tu l'aura peut-être remarqué : c'est "INSERT INTO" et pas "INSERT INOT".

Pour l'explication :
- on récupère l'enregistrement sous forme de tableau associatif (champ => valeur)
- on supprime l'id
- on récupère d'un coté les clés du tableau (champs) et d'un autre les valeurs (on en profite pour les passer par "mysql_real_escape_string")
- on génère un requete "insert" qu'on exécute.

Ma crainte est que l'opération "array_map('mysql_real_escape_string', $result)" ne fonctionne pas :roll:
 
WRInaute impliqué
Si c'est une opération qui n'est pas faisable facilement, c'est peut-être qu'elle n'a aucun sens non ? :mrgreen: Quel intérêt d'avoir 2 fois les mêmes données ?
Dans tous les cas, même si tu veux faire ça, je pense qu'il faut passer par des niveaux supérieurs à la base de données, c'est à dire : comment gères-tu tes données dans ta partie applicative (cloner des objets par exemple, etc.).
 
WRInaute accro
FloBaoti a dit:
Si c'est une opération qui n'est pas faisable facilement, c'est peut-être qu'elle n'a aucun sens non ?

Euh non :) code donc un tableau d'analyse croisée directement en Mysql, c'est pas très simple non plus ... :D
 
WRInaute passionné
FloBaoti a dit:
Si c'est une opération qui n'est pas faisable facilement, c'est peut-être qu'elle n'a aucun sens non ? :mrgreen:
j'étais sûr que qqn allait me dire ça : ba tu es l'heureux élu ^^
FloBaoti a dit:
Quel intérêt d'avoir 2 fois les mêmes données ?
long à expliquer maintenant mais je t'assure qu'il est important
 
Nouveau WRInaute
Salut,
pour ma part, je fais ça:

Code:
$requete="INSERT INTO ma_table (champ_1, champ_2, champ_3)
			SELECT champ_1, champ_2, champ_3
			FROM ma_table
			WHERE id=".$_GET['id']."";
		
$resultat=mysql_query($requete) or die ("Problème lors de la requête. Erreur: <br />".mysql_error());

Avec cette méthode, j'ai tout dans une requête. A voir si tu veux le combiner avec le méthode de seebz.
 
Discussions similaires
Haut