Partage
  • Partager sur Facebook
  • Partager sur Twitter

UPDATE et LIMIT

    15 novembre 2010 à 17:09:33

    Bonjour everyone,

    Voici mon problème :

    J'ai 2 tables et dans l'une d'elle je souhaiterai modifier une donnée.

    UPDATE table1 t1
    LEFT JOIN table2 t2
    ON t1.ID=t2.ID
    SET t1.date1 = '2014-12-10'
    WHERE t2.type = 'mod2'
    ;
    


    Donc ca fonctionnement pas totalement comme je veux, c'est-à-dire toutes lignes qui auront comme type = 'mod2' seront modifiées c'est la que mon problème se pose.
    Je voudrais modifier seulement la première ligne que mysql trouve, mais apparemment LIMIT n'est pas autorisé avec un UPDATE.

    Voilà, si quelqu'un à une alternative à mon problème x)

    Merci.


    • Partager sur Facebook
    • Partager sur Twitter
      15 novembre 2010 à 17:38:33

      LIMIT fonctionne correctement avec UPDATE après test (version 5.1 de MySQL). Par contre, j'ai de la difficulté à saisir le sens. Quel est l'intérêt de faire une telle requête ? Soit on met à jour une ligne précise, soit un groupe de lignes qui vérifie une certaine condition.
      • Partager sur Facebook
      • Partager sur Twitter
        15 novembre 2010 à 18:02:56

        Alors moi je suis en 5.3 donc le souci viens sûrement de moi comment l'utiliserais tu ? :euh:

        Sinon pour le sens j'ai un peu simplifié, mais en gros c'est pour faire des réservations => si dispo alors j'update le premier de la liste des disponibles.
        • Partager sur Facebook
        • Partager sur Twitter
          15 novembre 2010 à 18:04:56

          J'avais fait un truc du genre :

          mysql> SELECT * FROM test;
          +------+------+---------------------+
          | id   | name | date                |
          +------+------+---------------------+
          | NULL | NULL | NULL                |
          | NULL | NULL | NULL                |
          | NULL | lol  | NULL                |
          |    1 | nom1 | 2010-11-02 14:20:21 |
          +------+------+---------------------+
          4 rows in set (0.00 sec)
          
          mysql> UPDATE test SET name = 'test' LIMIT 1;
          Query OK, 1 row affected (0.00 sec)
          Rows matched: 1  Changed: 1  Warnings: 0
          
          mysql> SELECT * FROM test;
          +------+------+---------------------+
          | id   | name | date                |
          +------+------+---------------------+
          | NULL | NULL | NULL                |
          | NULL | lol  | NULL                |
          | NULL | test | NULL                |
          |    1 | nom1 | 2010-11-02 14:20:21 |
          +------+------+---------------------+
          4 rows in set (0.00 sec)


          Edit: Ah, je viens de comprendre, tu as probablement écrit LIMIT 0,1 plutôt que LIMIT 1. La syntaxe normalisée, c'est LIMIT 1 OFFSET 0. Et comme toute requête commence à l'offset 0, la dernière partie n'est pas obligatoire. C'est pourquoi LIMIT 1 fonctionne correctement seul, et probablement pourquoi ça fonctionne uniquement de cette façon avec UPDATE (ce serait encore moins logique de mettre à jour des lignes à partir de la X-ième rencontrée puisqu'il n'y a pas d'ordre dans une table).
          • Partager sur Facebook
          • Partager sur Twitter
            15 novembre 2010 à 19:01:38

            Ouaip j'avais vu ce problème sur un autre forum comme quoi

            Pour le SELECT :
            LIMIT [offset,] nbEnregistrements

            Pour le UPDATE :
            LIMIT nbEnregistrements

            Et en effet j'ai essayé sur un requête UPDATE basique ca marche. C'est un souci de syntaxe dans ma requête je sais pas trop ou le placer en fait le LIMIT 1 :s.


            UPDATE table1 t1
            LEFT JOIN table2 t2
            ON t1.ID=t2.ID
            SET t1.date1 = '2014-12-10'
            WHERE t2.type = 'mod2'
            LIMIT 1
            ;
            
            • Partager sur Facebook
            • Partager sur Twitter
              15 novembre 2010 à 19:03:10

              LIMIT est toujours la dernière clause d'une requête. Donc, ta dernière requête devrait fonctionner correctement.
              • Partager sur Facebook
              • Partager sur Twitter
                15 novembre 2010 à 19:17:22

                Avec le LIMIT :

                #1221 - Incorrect usage of UPDATE and LIMIT

                Et sans, toutes mes valeurs sont modifiées la requête s'exécute correctement.

                J'avoue ne plus trop comprendre xD
                • Partager sur Facebook
                • Partager sur Twitter

                UPDATE et LIMIT

                × 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