MySql : dupliquer une enregistrement


rudddy
WRInaute accro
WRInaute accro
 
Messages: 2570
Inscription: 1 Aoû 2007

MySql : dupliquer une enregistrement

Message le Mer Déc 29, 2010 16:54

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


UsagiYojimbo
WRInaute accro
WRInaute accro
 
Messages: 8575
Inscription: 23 Nov 2005

Re: MySql : dupliquer une enregistrement

Message le Mer Déc 29, 2010 16:58

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 ?


rudddy
WRInaute accro
WRInaute accro
 
Messages: 2570
Inscription: 1 Aoû 2007

Re: MySql : dupliquer une enregistrement

Message le Mer Déc 29, 2010 17:18

rudddy a écrit:Une condition obligatoire est que je n'ai pas à réécrire tous les champs de ma table (près d'une centaine)


on peut pas faire un insert sans préciser les champs ^^


UsagiYojimbo
WRInaute accro
WRInaute accro
 
Messages: 8575
Inscription: 23 Nov 2005

Re: MySql : dupliquer une enregistrement

Message le Mer Déc 29, 2010 17:30

Et en jouant avec http://php.net/manual/fr/function.mysql-field-name.php pour récupérer dans une boucle les libellés des différentes colonnes et ainsi facilement générer l'ordre sql qui va bien ?


seebz
WRInaute impliqué
WRInaute impliqué
 
Messages: 808
Inscription: 15 Avr 2007

Re: MySql : dupliquer une enregistrement

Message le Mer Déc 29, 2010 18:30

J'ai pas testé mais est-ce que le code suivant ne conviendrai pas ?

Code: Tout sélectionner
$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);


rudddy
WRInaute accro
WRInaute accro
 
Messages: 2570
Inscription: 1 Aoû 2007

Re: MySql : dupliquer une enregistrement

Message le Mer Déc 29, 2010 19:16

UsagiYojimbo a écrit:Et en jouant avec http://php.net/manual/fr/function.mysql-field-name.php pour récupérer dans une boucle les libellés des différentes colonnes et ainsi facilement générer l'ordre sql qui va bien ?

il faudrait connaitre auparavant le nb de colonnes non ?

@seebz, merci je vais tester même si je t'avoue que je n'ai pas tout compris.

Yves


seebz
WRInaute impliqué
WRInaute impliqué
 
Messages: 808
Inscription: 15 Avr 2007

Re: MySql : dupliquer une enregistrement

Message le Jeu Déc 30, 2010 8:54

rudddy a écrit:@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:

FloBaoti
WRInaute impliqué
WRInaute impliqué
 
Messages: 755
Inscription: 30 Avr 2006

Re: MySql : dupliquer une enregistrement

Message le Jeu Déc 30, 2010 10:58

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.).


Marie-Aude
Modérateur
Modérateur
 
Messages: 11889
Inscription: 5 Juin 2006

Re: MySql : dupliquer une enregistrement

Message le Jeu Déc 30, 2010 12:04

FloBaoti a écrit: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


rudddy
WRInaute accro
WRInaute accro
 
Messages: 2570
Inscription: 1 Aoû 2007

Re: MySql : dupliquer une enregistrement

Message le Jeu Déc 30, 2010 12:15

FloBaoti a écrit: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 écrit:Quel intérêt d'avoir 2 fois les mêmes données ?

long à expliquer maintenant mais je t'assure qu'il est important


rudddy
WRInaute accro
WRInaute accro
 
Messages: 2570
Inscription: 1 Aoû 2007

Re: MySql : dupliquer une enregistrement

Message le Jeu Déc 30, 2010 13:00

@seebz : ca marche nickel merci + 1 reco

leica69
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 30
Inscription: 25 Oct 2004

Re: MySql : dupliquer une enregistrement

Message le Mar Jan 04, 2011 17:13

Salut,
pour ma part, je fais ça:

Code: Tout sélectionner
$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.


rudddy
WRInaute accro
WRInaute accro
 
Messages: 2570
Inscription: 1 Aoû 2007

Re: MySql : dupliquer une enregistrement

Message le Mar Jan 04, 2011 17:27

rudddy a écrit:Une condition obligatoire est que je n'ai pas à réécrire tous les champs de ma table (près d'une centaine)

merci quand même


UsagiYojimbo
WRInaute accro
WRInaute accro
 
Messages: 8575
Inscription: 23 Nov 2005

Re: MySql : dupliquer une enregistrement

Message le Mar Jan 04, 2011 18:16

rudddy a écrit:il faudrait connaitre auparavant le nb de colonnes non ?


Pour ca il y a http://www.php.net/manual/fr/function.mysql-num-fields.php


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité