IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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 :

clause du WHERE non prise en compte


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier
    Homme Profil pro
    directeur hypermarché
    Inscrit en
    Avril 2009
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : directeur hypermarché

    Informations forums :
    Inscription : Avril 2009
    Messages : 227
    Points : 111
    Points
    111
    Par défaut clause du WHERE non prise en compte
    Bonjour à tous,

    J'utilise cette requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT shop_monnaies.*,shop_offres.* 
    FROM shop_offres 
    INNER JOIN shop_monnaies 
    WHERE shop_monnaies.client = %s 
      and shop_monnaies.vendue='INVENDUE' 
    GROUP BY shop_offres.article DESC 
    HAVING max(up)<pr 
    ORDER BY shop_monnaies.id DESC
    et je viens de m'apercevoir que si je mets dans ma base vendue='STOP' , par exemple, la requête m'affiche toujours l'objet ???
    Pire! J'ai fait le test en enlevant shop_monnaies.vendue='INVENDUE' de la requête , et le résultat est inchangé ?

    Habroc
    www.masterquizz.fr - Ne vous posez plus de questions

  2. #2
    En attente de confirmation mail
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Octobre 2010
    Messages
    501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2010
    Messages : 501
    Points : 1 060
    Points
    1 060
    Par défaut
    Bonjour,

    Le critère de regrouppement ne peut fonctionner avec avec le contenu de votre clause SELECT.

    Quel est l'intérêt de la clause group by dans votre requête ?

  3. #3
    Membre régulier
    Homme Profil pro
    directeur hypermarché
    Inscrit en
    Avril 2009
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : directeur hypermarché

    Informations forums :
    Inscription : Avril 2009
    Messages : 227
    Points : 111
    Points
    111
    Par défaut
    Citation Envoyé par Nudger Voir le message

    Quel est l'intérêt de la clause group by dans votre requête ?
    Dans shop_offres , il y a des articles qui peuvent avoir reçu plusieurs offres , et je ne veux afficher ces articles qu'une seule fois...

    J'ai ajouté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ON shop_monnaies.id=shop_offres.article
    après le INNER JOIN et ça semble fonctionner correctement.
    www.masterquizz.fr - Ne vous posez plus de questions

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    C'est une horreur cette requête !

    1) Il vaut mieux éviter la guerre des étoiles !

    2) Il n'y a pas de condition de jointure.
    Apparemment, d'après votre dernier message, vous avez corrigé ce point.

    3) DESC dans le GROUP BY est inutile. Il n'y a pas d'ordre dans un GROUP BY.
    C'est même miraculeux que le SGBD ne donne pas une erreur de syntaxe sur ce point.
    Encore une tolérance trompeuse du mauvais MySQL !

    4) Toutes les colonnes du SELECT ne faisant pas l'objet d'une fonction de groupage doivent figurer dans le GROUP BY sous peine de voir des valeurs aléatoires pour les colonnes manquantes.

    5) L'utilisation d'alias pour les tables est fortement recommandé dès qu'il y a plus d'une table dans la requête. Cela facilite l'écriture et la lecture de celle-ci. Il faut ensuite utiliser systématiquement ces alias devant chaque colonne nommée pour savoir facilement de quelle table elle vient.

    Voici votre requête récrite d'une manière plus correcte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT o.article
    FROM shop_offres o
    INNER JOIN shop_monnaies m ON m.id = o.article
    WHERE m.client = %s
      AND m.vendue = 'INVENDUE'
    GROUP BY o.article
    HAVING max(up) < pr -- de quelles tables viennent ces colonnes ?
    ORDER BY o.article DESC
    Quant à votre problème :
    si je mets dans ma base vendue='STOP' , par exemple, la requête m'affiche toujours l'objet ???
    Pire! J'ai fait le test en enlevant shop_monnaies.vendue='INVENDUE' de la requête , et le résultat est inchangé ?
    Expliquez en français ce que vous cherchez à obtenir, donnez la structure de vos tables, un petit jeu de données et le résultat attendu.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre régulier
    Homme Profil pro
    directeur hypermarché
    Inscrit en
    Avril 2009
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : directeur hypermarché

    Informations forums :
    Inscription : Avril 2009
    Messages : 227
    Points : 111
    Points
    111
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT o.article
    FROM shop_offres o
    INNER JOIN shop_monnaies m ON m.id = o.article
    WHERE m.client = %s
      AND m.vendue = 'INVENDUE'
    GROUP BY o.article
    HAVING max(up) < pr -- de quelles tables viennent ces colonnes ?
    ORDER BY o.article DESC
    Merci beaucoup CinePhil pour la mise au point

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HAVING max(up) < pr -- de quelles tables viennent ces colonnes ?
    Elles proviennent de shop_offres ; donc si j'ai bien compris , je devrais écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HAVING o.max(up) < o.pr
    www.masterquizz.fr - Ne vous posez plus de questions

  6. #6
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par HAbroc Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HAVING max(up) < pr -- de quelles tables viennent ces colonnes ?
    Elles proviennent de shop_offres ; donc si j'ai bien compris , je devrais écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HAVING o.max(up) < o.pr
    Pas tout à fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HAVING MAX(o.up) < o.pr
    Mais pas sûr que ça fonctionne ! Vérifiez les résultats obtenus.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

Discussions similaires

  1. [Oracle] Clause WHERE non prise en compte ou problème de dates ?
    Par nicobest dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 22/05/2007, 16h22
  2. clause where non pris en compte
    Par zulkifli dans le forum Requêtes
    Réponses: 4
    Dernier message: 31/08/2006, 14h41
  3. [css] Feuille de style non prise en compte
    Par Neuromancien2 dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 29/06/2005, 11h49
  4. [netbeans] Modifications non prises en compte
    Par nadass dans le forum NetBeans
    Réponses: 6
    Dernier message: 07/04/2005, 13h49
  5. Lecture de fichier - dernière ligne non prise en compte
    Par JulienPles dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 16/03/2005, 11h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo