MySql : dupliquer une enregistrement
14 messages
• Page 1 sur 1
-

rudddy - WRInaute accro

- Messages: 2570
- Inscription: 1 Aoû 2007
MySql : dupliquer une enregistrement
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
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

- Messages: 8575
- Inscription: 23 Nov 2005
Re: MySql : dupliquer une enregistrement
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 ?
-

UsagiYojimbo - WRInaute accro

- Messages: 8575
- Inscription: 23 Nov 2005
Re: MySql : dupliquer une enregistrement
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é

- Messages: 808
- Inscription: 15 Avr 2007
Re: MySql : dupliquer une enregistrement
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

- Messages: 2570
- Inscription: 1 Aoû 2007
Re: MySql : dupliquer une enregistrement
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é

- Messages: 808
- Inscription: 15 Avr 2007
Re: MySql : dupliquer une enregistrement
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
- FloBaoti
- WRInaute impliqué

- Messages: 755
- Inscription: 30 Avr 2006
Re: MySql : dupliquer une enregistrement
Si c'est une opération qui n'est pas faisable facilement, c'est peut-être qu'elle n'a aucun sens non ?
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.).
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

- Messages: 11889
- Inscription: 5 Juin 2006
Re: MySql : dupliquer une enregistrement
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
-

rudddy - WRInaute accro

- Messages: 2570
- Inscription: 1 Aoû 2007
Re: MySql : dupliquer une enregistrement
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 ?
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
- leica69
- Nouveau WRInaute

- Messages: 30
- Inscription: 25 Oct 2004
Re: MySql : dupliquer une enregistrement
Salut,
pour ma part, je fais ça:
Avec cette méthode, j'ai tout dans une requête. A voir si tu veux le combiner avec le méthode de seebz.
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.
-

UsagiYojimbo - WRInaute accro

- Messages: 8575
- Inscription: 23 Nov 2005
Re: MySql : dupliquer une enregistrement
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
14 messages
• Page 1 sur 1
Lectures recommandées sur ce thème :
- Dupliquer une base de données MySQL
- MySQL GROUP BY sur le dernier enregistrement
- performance mySQL rang d'un enregistrement
- executer une requete mysql a partir d'un enregistrement
- Mysql: déplacer un enregistrement d'une table à une autre?
- dupliquer la balise h1
- Dois je dupliquer la galerie photos ?
- dupliquer un site .fr en .eu pour clientèle europe ?
- Dupliquer un site pour le rendre accéssible
- Dupliquer le contenu d'une base Access
- Yahoo poursuit les propriétaires de 1763 noms de domaine - 23-06-2006
- Gestion des langues et des sessions en PHP / MySQL - 02-05-2004
- Passage à l'heure d'été/hiver sur un forum phpBB - 31-10-2010
- Script de mise en cache des pages (PHP MySQL) - 09-08-2010
- GoogleStats : analyse temps réel des visites de Google sur votre site - 02-10-2002
- Sortie officielle de GoogleStats v2.0 ! - 23-02-2003
- AdSense Tracking : statistiques détaillées sur les clics AdSense - 29-02-2004
- Google Health : votre dossier médical géré par Google... - 20-05-2008
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité
