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 :

Requête avec Group By utilisation clause where


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 139
    Par défaut Requête avec Group By utilisation clause where
    Bonsoir,

    Je voudrais de l'aide concernant une requête SQL utilisant plusieurs tables. J'ai 3 tables comme suit :
    - z_categories : table contenant des catégorie de musiques (année, style, etc...)
    - z_musiques : table contenant des musiques (nom, auteur, etc...)
    _z_styles : table joignant chaque musique à sa ou ses catégorie(s) (exemple : musique1 dans la catégorie 1, et 7; musique2 dans la catégorie 8 et 14;).

    Lorsque je cherche une musique étant dans la catégorie 1, 9 ou 4, j'utilise la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT * FROM `z_musiques`, `z_categories`, `z_styles`
    WHERE
    (style_id = '1' OR
    style_id = '9' OR
    style_id = '4')
    AND z_styles.style_id = z_categories.categorie_style_id
    AND z_categories.categorie_musique_id = z_musiques.musique_id
    GROUP BY categorie_musique_id;
    J'aimerais exécuter la même requête, pour lister les musiques étant dans les catégories 1 ET 9 ET 4, mais je ne vois pas comment formuler cette requête.

    Est-ce que quelqu'un saurait m'avancer ?

    Merci d'avance,
    Guilaume.

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 059
    Par défaut
    Bonjour,

    Plusieurs remarques concernant votre requête :
    • Vous dites que vous cherchez les musiques des catégories 1, 4 ou 9 mais vous mettez une condition sur les id des styles 1, 4 ou 9. Quand on regarde votre requête, c'est plutôt l'inverse entre style et catégorie : catégorie joint musique et style, non ?
    • Si style_id est un champ de type INT, les quotes autour des valeurs 1, 4 et 9 sont inutiles et contre-performantes, parce qu'elles forcent MySQL à faire une conversion implicite ;
    • Depuis 1992, on n'écrit plus les jointures en séparant les tables par des virgules, mais avec la syntaxe INNER JOIN ;
    • Mettre un GROUP BY à la fin d'un SELECT * ne sert à rien.


    Il y a plusieurs façons possible pour résoudre votre problème.
    L'une d'elle consiste à compter le nombre de catégories pour les musiques dans les catégories 1, 4 et 9 et vérifier que ce décompte vaut 3 (ce qui signifie alors que les 3 catégories sont représentées) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT m.musique_id
    FROM z_musiques m
    INNER JOIN z_categorie c ON m.musique_id = c.categorie_musique_id
    INNER JOIN z_styles s ON c.categorie_style_id = s.style_id
    WHERE s.style_id IN (1, 4, 9)
    GROUP BY m.musique_id
    HAVING COUNT(*) = 3
    A tester et adapter en fonction du type des champs de votre table...

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 139
    Par défaut
    Bonjour Ced,

    Merci pour votre réponse très complète
    En effet, mon style_id est INT, et j'ignorais qu'on pouvait ne pas mettre les quotes !

    Merci,
    Guillaume.

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

Discussions similaires

  1. Requêtes avec condition dans la clause where
    Par desmo dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 25/02/2008, 13h36
  2. Requête avec Group by sur Oracle 8i
    Par madina dans le forum Oracle
    Réponses: 14
    Dernier message: 16/06/2006, 12h41
  3. requête avec group by...
    Par JerBi dans le forum Langage SQL
    Réponses: 3
    Dernier message: 29/03/2006, 03h17
  4. Problème requête avec group by et distinct
    Par tomca dans le forum Langage SQL
    Réponses: 2
    Dernier message: 20/07/2005, 16h10
  5. requête avec group by
    Par Staron dans le forum Langage SQL
    Réponses: 4
    Dernier message: 29/11/2004, 16h30

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