1. ⭐⭐⭐ Grosse PROMO en cours sur ma plateforme SEO My Ranking Metrics
    Rejeter la notice

MySql : dupliquer une enregistrement

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par rudddy, 29 Décembre 2010.

  1. rudddy
    rudddy WRInaute passionné
    Inscrit:
    1 Août 2007
    Messages:
    2 143
    J'aime reçus:
    0
    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
     
  2. UsagiYojimbo
    UsagiYojimbo WRInaute accro
    Inscrit:
    23 Novembre 2005
    Messages:
    11 874
    J'aime reçus:
    71
    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 ?
     
  3. rudddy
    rudddy WRInaute passionné
    Inscrit:
    1 Août 2007
    Messages:
    2 143
    J'aime reçus:
    0
    on peut pas faire un insert sans préciser les champs ^^
     
  4. UsagiYojimbo
    UsagiYojimbo WRInaute accro
    Inscrit:
    23 Novembre 2005
    Messages:
    11 874
    J'aime reçus:
    71
  5. seebz
    seebz WRInaute impliqué
    Inscrit:
    15 Avril 2007
    Messages:
    728
    J'aime reçus:
    0
    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);
    
     
  6. rudddy
    rudddy WRInaute passionné
    Inscrit:
    1 Août 2007
    Messages:
    2 143
    J'aime reçus:
    0
    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
     
  7. seebz
    seebz WRInaute impliqué
    Inscrit:
    15 Avril 2007
    Messages:
    728
    J'aime reçus:
    0
    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:
     
  8. FloBaoti
    FloBaoti WRInaute impliqué
    Inscrit:
    30 Avril 2006
    Messages:
    643
    J'aime reçus:
    0
    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.).
     
  9. Marie-Aude
    Marie-Aude WRInaute accro
    Inscrit:
    5 Juin 2006
    Messages:
    16 372
    J'aime reçus:
    2
    Euh non :) code donc un tableau d'analyse croisée directement en Mysql, c'est pas très simple non plus ... :D
     
  10. rudddy
    rudddy WRInaute passionné
    Inscrit:
    1 Août 2007
    Messages:
    2 143
    J'aime reçus:
    0
    j'étais sûr que qqn allait me dire ça : ba tu es l'heureux élu ^^
    long à expliquer maintenant mais je t'assure qu'il est important
     
  11. rudddy
    rudddy WRInaute passionné
    Inscrit:
    1 Août 2007
    Messages:
    2 143
    J'aime reçus:
    0
    @seebz : ca marche nickel merci + 1 reco
     
  12. leica69
    leica69 Nouveau WRInaute
    Inscrit:
    25 Octobre 2004
    Messages:
    47
    J'aime reçus:
    0
    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.
     
  13. rudddy
    rudddy WRInaute passionné
    Inscrit:
    1 Août 2007
    Messages:
    2 143
    J'aime reçus:
    0
    merci quand même
     
  14. UsagiYojimbo
    UsagiYojimbo WRInaute accro
    Inscrit:
    23 Novembre 2005
    Messages:
    11 874
    J'aime reçus:
    71
Chargement...
Similar Threads - MySql dupliquer enregistrement Forum Date
Mysql migration utf8->utf8mb4 Développement d'un site Web ou d'une appli mobile 17 Août 2019
recherche lettres dans mysql Développement d'un site Web ou d'une appli mobile 11 Juillet 2019
cache mysql maison Développement d'un site Web ou d'une appli mobile 18 Février 2019
Stocker dans des variables php les fonctions MySql Développement d'un site Web ou d'une appli mobile 2 Février 2019
message : [LEGACY][libmysqlclient] Please consider moving to stable and mysqlnd in Administration d'un site Web 8 Novembre 2018
Connexion à un serveur mysql distant Développement d'un site Web ou d'une appli mobile 21 Octobre 2018
Mysql, modifier des chaines avec différents caractères Administration d'un site Web 13 Septembre 2018
Fusionner deux champs sur la même table et même base de donnée Mysql Administration d'un site Web 12 Septembre 2018
Requête Mysql avec des string Développement d'un site Web ou d'une appli mobile 6 Février 2018
Surveiller les connexions à la base de données MySQL Développement d'un site Web ou d'une appli mobile 1 Février 2018
  1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies.
    Rejeter la notice