Partage
  • Partager sur Facebook
  • Partager sur Twitter

[SQL] ON DUPLICATE KEY

php/mysql 2 requêtes en une!

Sujet résolu
    17 mars 2011 à 22:09:48

    Bonjour,

    Je voudrais créer une seule et même requête capable de faire soit un insert si l'enregistrement n'existe pas, soit faire un update s'il existe déjà.
    J'ai créé un index sur l'ensemble des Champ_2, Champ_3 et Champ_4.
    (J'ai en plus une clef primaire "id" en autoincrement je ne sais pas si ça peut gêner?)


    Donc je voudrais transformer ces 2 requête :

    INSERT INTO base.table
    VALUES (
    Champ_2=-12,
    Champ_3=-20,
    Champ_4=10371,
    Champ_5='blabla' ,
    champ_7=5
    )
    

    UPDATE base.table
    SET
    Champ_5='blabla' ,
    champ_7=5
    WHERE
    Champ_2=-12
    AND Champ_3=-20
    AND Champ_4=10371
    


    En une seule requête,
    Après de nombreuses heures j'en suis là:

    INSERT INTO base.table
    VALUES (
    Champ_2=-12,
    Champ_3=-20,
    Champ_4=10371,
    Champ_5='blabla' ,
    champ_7=5
    )
    ON DUPLICATE KEY UPDATE
    Champ_5='blabla' ,
    Champ_7=5
    


    Je ne sais pas si c'est correct en tout cas cela me retourne une erreur:

    Citation : PHPMYADMIN

    Column count doesn't match value count at row 1



    Seulement voilà je sèche :p je ne vois pas quel champ il lui manque...

    En plus je ne pense pas avoir bien compris comment fonctionne le on duplicate key o_O ...

    Merci pour vos lumières :)
    • Partager sur Facebook
    • Partager sur Twitter
      17 mars 2011 à 23:15:06

      INSERT INTO base.table (Champ_2, Champ_3, Champ_4, Champ_5, Champ_7)
      VALUES (-12,
      -20,
      10371,
      'blabla' ,
      5
      )
      ON DUPLICATE KEY UPDATE
      Champ_5='blabla' ,
      Champ_7=5
      



      C'est surtout la syntaxe de INSERT INTO que tu dois revoir on dirait...
      • Partager sur Facebook
      • Partager sur Twitter
        17 mars 2011 à 23:40:00

        Citation : Taguan

        C'est surtout la syntaxe de INSERT INTO que tu dois revoir on dirait...


        Tiens c'est bizarre il me semble bien avoir déjà mis en place cette syntaxe qui pour moi est la plus lisible.

        Enfin bref j'ai effectué la correction tel que dans ton message mais l'erreur est la même...

        Pour info:
        -L'index qui prend les champs: Champ_2, Champ_3 et Champ_4 s'appelle IndexU cela ne doit pas apparaitre quelque-part? Il est de type "BTREE" et est "unique"
        -La clef primaire 'id' s'appelle visiblement "PRIMARY" et est également "unique" (+autoincrement)
        -J'ai d'autres champs que je ne souhaite pas compléter par cette requête.

        Voilà...

        En tout cas Merci de m'avoir aidé!


        • Partager sur Facebook
        • Partager sur Twitter
          20 mars 2011 à 23:03:04

          Arf quand j'ai modifié ma requête pour faire l'insert de ta façon j'ai oublié un champ!!! Maintenant ça marche merci!

          Mais pourquoi l'autre façon de faire l'insert ne fonctionne pas dans ce cas précis?
          (Bon je sais bien que tu déconseille cette méthode dans ton tuto mais la lisibilité est pour moi un paramètre essentiel...)
          • Partager sur Facebook
          • Partager sur Twitter

          [SQL] ON DUPLICATE KEY

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown