Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Erreur de syntaxe


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Erreur de syntaxe
    Bonjour,

    j'ai un petit soucie si vous pouvez m'aider.

    j'ai ce code qui renvoi 0 ligne affectée.
    avec and id_product != 13 le code ne fonctionne pas sans tout fonctionne.
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    UPDATE ps_product 
    SET active = 0 WHERE id_product IN (SELECT id_product FROM ps_product_shop 
    WHERE (price is null or price = "" and id_product != 13))


    Merci

  2. #2
    Modérateur

    Citation Envoyé par bimbo9991 Voir le message
    avec and id_product != 13 le code ne fonctionne pas sans tout fonctionne.
    Qu'entends-tu par là ?
    Une erreur d'exécution : Quel est le message retourné par le SGBD ?
    Un résultat erroné : Qu'est-ce qui était attendu ? Qu'est-ce qui est retourné ?

    PS : Ton problème n'est peut être qu'une question de précédence des opérateurs...
    Cette signature n'a pas pu être affichée car elle comporte des erreurs.

  3. #3
    Membre à l'essai
    je fait les testes directement via phpmyadmin
    logiquement il doit désactiver tout les produits dont le price est vide sauf le produit avec id_product 13
    mais il ne fait rien

  4. #4
    Modérateur

    C'est donc la sous-requête SELECT id_product FROM ps_product_shop WHERE (price is null or price = "" and id_product != 13) qui te pose un problème.
    C'est donc celle-ci qu'il faut corriger.

    1. Les parenthèses autour de l'expression price is null or price = "" and id_product != 13 sont inutiles.
    2. Par l'application des règles de précédence des opérateurs, cette expression est évaluée comme price is null or (price = "" and id_product != 13)

    Il faut peut-être placer des parenthèses utiles : (price is null or price = "") and id_product != 13.

    il ne faut pas hésiter à mettre en forme (indentation, sauts de ligne) la requête :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    UPDATE  ps_product 
    SET     active = 0 
    WHERE   id_product IN 
            (   SELECT  id_product
                FROM    ps_product_shop 
                WHERE   (   price   IS NULL 
                        OR  price   = ''
                        )
                    AND id_product != 13
            )


    Ce qui met en évidence que la requête peut aussi s'écrire ainsi :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    UPDATE  ps_product  pdt
    SET     pdt.active = 0 
    WHERE   pdt.id_product
            (   SELECT  psh.id_product
                FROM    ps_product_shop psh
                WHERE   psh.price   IS NULL 
                    OR  psh.price   = ''
            )
        AND pdt.id_product != 13
    Cette signature n'a pas pu être affichée car elle comporte des erreurs.

  5. #5
    Membre à l'essai
    1000 fois merci ça fonctionne impeccable, merci encore

###raw>template_hook.ano_emploi###