Partage
  • Partager sur Facebook
  • Partager sur Twitter

[sql] Erreur lorsque je tente de faire plusieurs choses à la fois

    26 février 2006 à 19:53:20

    Salut tout le monde
    Voici mon code
    UPDATE `map` SET `30` = '3' WHERE `id` = '11',
    SET `30` = '3' WHERE `id` = '12'
    mais ca m'affiche une erreur, alors que dois-je rectifier ?
    • Partager sur Facebook
    • Partager sur Twitter
      26 février 2006 à 20:03:08

      UPDATE `map` SET `30` = '3' WHERE `id` IN ( '11','12' )


      Tu ne peux pas faire 2 update "différent" en même temps, genre "mets jour à 2 pour id = 10, et jour à 3 pour id = 9", tu appliques la même mise à jour sur toutes les lignes concernées, mais je t'embrouille là peut etre :euh:
      • Partager sur Facebook
      • Partager sur Twitter
        26 février 2006 à 20:55:05

        Humm je pense comprendre, et sinon ( si j'ai bien compris ce n'est pas posible mais ) comment compacter
        UPADATE TABLE SET `colone1` = 'valeur1' WHERE id = 'id1'

        et
        UPADATE TABLE SET `colone2` = 'valeur2' WHERE id = 'id2'

        en une seul requete ?
        • Partager sur Facebook
        • Partager sur Twitter
          26 février 2006 à 20:59:40

          c'est UPDATE et non UPADATE :p
          • Partager sur Facebook
          • Partager sur Twitter
            27 février 2006 à 1:10:51

            Apparemment,tu as bien compris, ça n'est pas possible: http://dev.mysql.com/doc/refman/5.0/fr/update.html

            Et moi, j'aimerais bien que ceux qui aident fassent un peu plus tourner cette adresse: http://www-fr.mysql.com/
            Pour le PHP, on propose bien plusieurs sites, notamment: http://fr.php.net/
            Alors, si on pouvait citer celui là aussi, ça permettrait à beaucoup de personnes de trouver réponses à leurs questions, sans demander ici...
            • Partager sur Facebook
            • Partager sur Twitter
              27 février 2006 à 3:11:14

              Citation : azmeuk

              Humm je pense comprendre, et sinon ( si j'ai bien compris ce n'est pas posible mais ) comment compacter

              UPADATE TABLE SET `colone1` = 'valeur1' WHERE id = 'id1'


              et

              UPADATE TABLE SET `colone2` = 'valeur2' WHERE id = 'id2'


              en une seul requete ?



              Citation : Tithugues

              Apparemment,tu as bien compris, ça n'est pas possible: http://dev.mysql.com/doc/refman/5.0/fr/update.html



              En fait, SI, c'est parfaitement faisable, mais la requete est légèrement compliquée, doit sans doute dépasser un peu ton niveau (pour la trouver par toi même ^^), et faire 2 requêtes c'est plus beau, et plus simple.

              Mais, c'est possible de faire 2 UPDATE "différents" avec une seul requete UPDATE, juste très chiant. ;)
              • Partager sur Facebook
              • Partager sur Twitter
                27 février 2006 à 18:01:08

                Spaz ca m'interesse, et je n'ai pas peur du compliqué, parce que pour faire cque je veux faire, j'aurais besoin de faire une vingtaine d'updates donc une vingtaine de requetes, et ca c'est pas top
                Tithugues merci pour le lien, ca faisait longtemps que je cherchait un site francais et serieux sur mysql
                • Partager sur Facebook
                • Partager sur Twitter
                  27 février 2006 à 18:33:18

                  Bon, donc si je prends tes 2 requetes (je change le nom de la table pour etre plus clair):

                  UPDATE ma_table SET `colone1` = 'valeur1' WHERE id = 'id1'

                  UPDATE ma_table SET `colone2` = 'valeur2' WHERE id = 'id2'


                  Ca nous fait, en une seule :
                  UPDATE ma_table
                  SET
                  `colone1` = IF( id = 'id1', 'valeur1', `colonne1`),
                   `colone2` = IF( id = 'id2', 'valeur2', `colonne2` )
                   WHERE id IN ('id1', 'id2')


                  Si je prends 2 requetes qui changent le meme champs :
                  UPDATE ma_table SET `colone1` = 'valeur1' WHERE id = 'id1'

                  UPDATE ma_table SET `colone1` = 'valeur2' WHERE id = 'id2'


                  Ca nous fait :
                  UPDATE ma_table
                  SET
                  `colone1` = IF( id = 'id1', 'valeur1', IF( id = 'id2', 'valeur2', `colonne1` ))
                   WHERE id IN ('id1', 'id2')


                  C'est du MySQL, mais ca doit ressembler a ca sur d'autres moteurs également.

                  Le truc, c'est que je ne suis pas sur que ce soit très performant :euh:
                  Si tu veux plus d'infos, je te conseille de lire le site de mysql, a propos du IF.

                  Tu peux remplacer le "WHERE id IN (blabla)", par "WHERE 1", ca ne change rien, mais ca doit etre un peu plus long ?!?

                  IF est à considérer comme l'opérateur ternaire "?" de PHP/C/Java/etc ...
                  • Partager sur Facebook
                  • Partager sur Twitter
                    27 février 2006 à 18:37:39

                    Merci bien, je teste ça tout de suite
                    • Partager sur Facebook
                    • Partager sur Twitter

                    [sql] Erreur lorsque je tente de faire plusieurs choses à la fois

                    × 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