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

Langage SQL Discussion :

Requête qui affiche trop de choses ?


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 187
    Points : 50
    Points
    50
    Par défaut Requête qui affiche trop de choses ?
    bonjour,
    quiz, pourquoi ma requete affiche aussi
    les produits.publierProduits = 0 ???

    merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    SELECT *
    FROM produits
    JOIN jointure_produits_categorie_produits
    ON produits.idProduits = jointure_produits_categorie_produits.idProduits
    JOIN categorie_produits
    ON jointure_produits_categorie_produits.idCategorieProduits = categorie_produits.idCategorieProduits
    LEFT JOIN etiquettes 
    ON produits.idEtiquettes = etiquettes.idEtiquettes
    LEFT JOIN marque_produits 
    ON produits.idMarqueProduits = marque_produits.idMarqueProduits
    WHERE $requeteWhere
    AND produits.publierProduits = 1
    AND marque_produits.publierMarqueProduits = 1
    AND categorie_produits.publierCategorieProduits = 1
    ORDER BY nomProduits

  2. #2
    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
    Peut-être parce qu'en mettant la condition de restriction sur une table externe dans le WHERE, tu transformes la jointure externe en jointure interne ?

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

    2) 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.
    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 !

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Je dirai plutôt que dans $requeteWhere se trouve une condition avec un OU et sans parenthèse, ce qui "fausse" le résultat.

    Tatayo.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 187
    Points : 50
    Points
    50
    Par défaut
    désolé j'avais oublié de mettre a quoi corresponds $requete
    le voici remplacé, ceci t'apportera peut etre une piste

    et j'ai résolut la guerre des etoiles,
    et ca ne marche pas nom plus ca m'affiche toujours les
    produits.publierProduits = 0
    ma requete vous semble t'elle correcte?

    merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    SELECT produits.nomProduits,
    produits.idProduits,
    categorie_produits.parentCategorieProduits, 
    FROM produits
    JOIN jointure_produits_categorie_produits
    ON produits.idProduits = jointure_produits_categorie_produits.idProduits
    JOIN categorie_produits
    ON jointure_produits_categorie_produits.idCategorieProduits = categorie_produits.idCategorieProduits
    LEFT JOIN etiquettes 
    ON produits.idEtiquettes = etiquettes.idEtiquettes
    LEFT JOIN marque_produits 
    ON produits.idMarqueProduits = marque_produits.idMarqueProduits
    WHERE (produits.nomProduits LIKE '%agitateur%' OR produits.refProduits LIKE '%agitateur%') 
    OR (produits.nomProduits LIKE '%mix%' OR produits.refProduits LIKE '%mix%')
    AND produits.publierProduits = 1
    AND marque_produits.publierMarqueProduits = 1
    AND categorie_produits.publierCategorieProduits = 1
    ORDER BY nomProduits

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Il manque bien des parenthèses dans la clause Where.
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    SELECT *
    FROM produits
    JOIN jointure_produits_categorie_produits
    ON produits.idProduits = jointure_produits_categorie_produits.idProduits
    JOIN categorie_produits
    ON jointure_produits_categorie_produits.idCategorieProduits = categorie_produits.idCategorieProduits
    LEFT JOIN etiquettes 
    ON produits.idEtiquettes = etiquettes.idEtiquettes
    LEFT JOIN marque_produits 
    ON produits.idMarqueProduits = marque_produits.idMarqueProduits
    WHERE ((produits.nomProduits LIKE '%agitateur%' OR produits.refProduits LIKE '%agitateur%') 
    OR (produits.nomProduits LIKE '%mix%' OR produits.refProduits LIKE '%mix%'))
    AND produits.publierProduits = 1
    AND marque_produits.publierMarqueProduits = 1
    AND categorie_produits.publierCategorieProduits = 1
    ORDER BY nomProduits

    Tatayo.

  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
    Tatyo a raison.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    WHERE (produits.nomProduits LIKE '%agitateur%' OR produits.refProduits LIKE '%agitateur%') 
    OR (produits.nomProduits LIKE '%mix%' OR produits.refProduits LIKE '%mix%')
    AND produits.publierProduits = 1
    AND marque_produits.publierMarqueProduits = 1
    AND categorie_produits.publierCategorieProduits = 1
    En simplifiant, la condition est celle-ci :
    A OR B AND C AND D AND E

    Et AND a priorité sur le OR en principe.
    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 !

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 187
    Points : 50
    Points
    50
    Par défaut
    c'est parfait merci merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Joomla!] Cherche requête qui affiche la liste des articles ?
    Par B-Pascal dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 02/09/2008, 12h09
  2. Requête qui affiche l'utilisateur connecté
    Par MartinezGarcia dans le forum SQL
    Réponses: 4
    Dernier message: 09/05/2008, 10h22
  3. Requête qui affiche les enregistrements de la semaine en cours
    Par fanico11 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 28/04/2008, 16h55
  4. Requête qui affiche les rdv DU JOUR
    Par fanico11 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 24/04/2008, 16h22
  5. Réponses: 4
    Dernier message: 17/10/2005, 15h05

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