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 :

Problème de sous-requêtes


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 62
    Points : 33
    Points
    33
    Par défaut Problème de sous-requêtes
    Bonjour, j'vous décris mon souci :

    J'ai 3 tables :
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    > categorie
    +-------+---------+------------+
    | idCat | nomCat  | cat_parent |
    +-------+---------+------------+
    | 17    | catB    | 21         |
    +-------+---------+------------+
    | 21    | catX    | -1         |
    +-------+---------+------------+
    | 22    | catY    | 21         |
    +-------+---------+------------+
     
     
    > categorie_produit
    +---------+---------+
    | ref     | id      |
    +---------+---------+
    | prod67  | 22      |
    +---------+---------+
    | prod92  | 22      |
    +---------+---------+
    | prod13  | 22      |
    +---------+---------+
    | prod77  | 17      |
    +---------+---------+
     
     
    > produit
    +-----------+---------+
    | refProd   | nomProd |
    +-----------+---------+
    | prod67    | truc    |
    +-----------+---------+
    | prod92    | machin  |
    +-----------+---------+
    | prod13    | ceci    |
    +-----------+---------+
    | prod77    | cela    |
    +-----------+---------+
    Ce que j'aimerai faire c'est, par exemple : récupérer les produits de la catégorie "catX", dis comme ça c'est pas compliqué mais ceci doit également les inclure les produits des sous-categories de la categorie "catX".

    Dans la table categorie, le champ "categorie_parent" de "catX" vaut "-1" ce qui veut dire que c'est une categorie_parent, alors que les autres categories (catB & catY) ont comme valeur pour le champ "categorie_parent" l'ID de la categorie dont elles sont la "fille"...

    Pour faire clair, lorsque je demande les produits de la categorie "catX" il me faut non seulement ces produits mais egalement les produits qui se trouveraient dans ses categories_filles (ici : "catB" & "catY")...


    Donc comme j'ai du mal, j'y vais étape par étape, j'en suis arrivé à la requete suivant (j'essaye d'aficher les references des produits concernés) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT ref FROM categorie_produit WHERE id = ( 
    SELECT idCat
    FROM categorie
    WHERE cat_parent = 21 )
    la sous-requete devrait me sortir deux résultats (17 & 22), et avec j'devrais pouvoir selectionner les produits, mais ça ne marche pas...

    de l'aide, please.

  2. #2
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Salut

    c'est pas une sous requête, mais une jointure qu'il te faut ^^
    avec OR dans le WHERE

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT CP.ref
    FROM categorie_produit CP
    <div style="margin-left:40px">INNER JOIN categorie C
    <div style="margin-left:40px">ON C.idCat = CP.id</div></div>WHERE C.idCat = 21 OR C.cat_parent = 21
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  3. #3
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Cela marche aussi avec une sous-requête, à condition de mettre IN au lieu de =
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  4. #4
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Citation Envoyé par Médiat
    Cela marche aussi avec une sous-requête, à condition de mettre IN au lieu de =
    et en ajoutant le OR au cas où idCat est directement égal à 21, à moins de faire un UNION dans la sous-requête (pas terrible)...

    dans tous les cas, la jointure est bien plus efficace
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 62
    Points : 33
    Points
    33
    Par défaut
    arff les jointures, j'm'embrouille toujours avec
    mais effectivement ça marche bien j'te remerci.

    par contre là j'ai dis que j'voulais afficher la référence pour simplifier la chose, maintenant si au lieu de ça j'voulais afficher les informartions du produit qui se trouvent dans la table produit, je fais une nouvelle jointure mais entre categorie_produit & produit ? (et si oui j'la fais à la suite de l'autre ?)

  6. #6
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    oui, bien sûr, tu peux faire deux jointures... mais là, il vaudrait peut-être mieux réorganiser un petit peu la requête (simple question de logique )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT P.refProd, P.nomProd
    FROM produits P
    <div style="margin-left:40px">INNER JOIN categorie_produit CP
    <div style="margin-left:40px">ON P.refProd = CP.ref
    INNER JOIN categorie C
    <div style="margin-left:40px">ON C.idCat = CP.id</div></div></div>WHERE C.idCat = 21 OR C.cat_parent = 21
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 62
    Points : 33
    Points
    33
    Par défaut
    Reponse un peu tardive mais merci ça a marché

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

Discussions similaires

  1. [Oracle 10g] Problème Union-sous requêtes-group by
    Par slobberbone dans le forum SQL
    Réponses: 2
    Dernier message: 17/09/2007, 18h16
  2. Problème de sous requête (retour d'une seule valeur)
    Par ero-sennin dans le forum Requêtes
    Réponses: 1
    Dernier message: 14/06/2006, 11h12
  3. Problème de sous requête
    Par espadon1 dans le forum Requêtes
    Réponses: 4
    Dernier message: 11/05/2006, 15h20
  4. Problème de sous requête
    Par Draiwn dans le forum Requêtes
    Réponses: 8
    Dernier message: 16/11/2005, 01h43

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