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 table intermédiaire


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Requête table intermédiaire
    Bonjour à tous,

    Voici la table intermédiaire que je souhaite interroger :


    Je souhaite extraire des revues_id dont les domaines_id peuvent être égales à différentes valeurs...
    Exemple : extraire les revues_id dont les domaines_id sont à la fois 6 et 18, dans ce cas revues_id= 320 (sans extraire évidemment revues_id=321)

    Je n'ai pas de soucis si la condition était l'un ou l'autre (operateur OR, ou avec ENUM pas de soucis) mais avec l'opérateur logique AND... je sèche bêtement !.

    est-ce possible avec une requête unique ?

    merci beaucoup pour vos conseils

  2. #2
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    Vous pouvez utiliser une autojointure, l'instruction IN ou aussi EXISTS, ...

    Bon courage
    Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Vous pouvez éviter l'autojointure, je vous donne des indices mais essayez de trouver la requête.
    Il vous faut les revues parmis deux domaines, dont le nombre de domaines est égal à deux.

  4. #4
    Futur Membre du Club
    Inscrit en
    Mai 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    merci pour vos réponses,

    En réalité, si j'ai pris 2 domaines pour l'exemple, il devrait être possible de rechercher sur plus... une revue peut être associée à de multiples domaines (pour l'instant une trentaine de domaines, même si évidemment aucune revue n'appartiendra à l'ensemble)

    Je dois tout de même passer par des requêtes imbriquées ?

  5. #5
    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
    Si le nombre de domaines à sélectionner est variable, penchez-vous plutôt sur la piste de Waldar...

    Il vous faut les revues parmi deux domaines, dont le nombre de domaines est égal à deux.
    Ca devient :
    Il vous faut les revues parmi X domaines, dont le nombre de domaines est égal à X.
    Je suppose que c'est l'utilisateur qui va fixer la liste des domaines à chercher et donc le programme pourra en compter le nombre.

    Bon courage.
    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 !

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Il n'y a, à priori, pas besoin de requête imbriquées.
    Essayez de traduire mon propos en SQL sur votre exemple.

  7. #7
    Futur Membre du Club
    Inscrit en
    Mai 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Bon, soyez indulgent... je me lance !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql ="SELECT revues_id, SUM(revues_id) as total FROM nomtable WHERE domaines_id IN ('18','6') GROUP BY revues_id";
    puis je teste à l'affichage si total=2 (ou le nombre de domaines choisis)

    par contre, c'est au niveau de php que j'effectue le tri final et non au niveau de la requête... est-ce correct ?

    encore merci pour vos conseils.

  8. #8
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 641
    Points
    4 641
    Par défaut
    salut,

    comme ceci peut être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT revues_id
    FROM nomtable 
    WHERE domaines_id IN ('18','6') 
    GROUP BY revues_id
    having count(*) = 2

  9. #9
    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
    SUM, c'est pour additionner. Si il faut retourner deux revues et que la première a pour id 2824 et la deuxième 3574, que va donner SUM(revues_id) ?

    Pour compter le nombre de revues c'est COUNT !

    Ensuite, pour reprendre ton exemple de requête, tu as deux domaines et tu cherches les revues qui sont en rapport avec ces deux domaines. Il faut donc s'assurer que le nombre de domaines par revue est bien de 2 avec la clause HAVNG.

    Dernière chose, tes id sont probablement de type entier donc ne met pas d'apostrophe autour des valeurs des id.

    La requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT revues_id
    FROM nomtable
    WHERE domaines_id IN(18, 6)
    GROUP BY revues_id
    HAVING COUNT(*) = 2
    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 !

  10. #10
    Futur Membre du Club
    Inscrit en
    Mai 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Effectivement, c'est nettement mieux !

    J'avais bien mis un count dans ma requête (me suis planté en recopiant dans le forum), par contre je m'y prenais effectivement comme un manche pour extraire les bonnes valeurs... de gros progrés à faire

    merci à tous pour votre aide précieuse.

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

Discussions similaires

  1. Optimisation requête avec table intermédiaire
    Par kango dans le forum Langage SQL
    Réponses: 8
    Dernier message: 18/05/2015, 18h29
  2. Requête à travers une table intermédiaire
    Par Tchupacabra dans le forum Débuter
    Réponses: 27
    Dernier message: 12/10/2008, 10h28
  3. Requête avec table intermédiaire
    Par jgfa9 dans le forum Requêtes
    Réponses: 3
    Dernier message: 19/03/2007, 18h51
  4. Index ou table intermédiaire ?
    Par n00bi dans le forum Décisions SGBD
    Réponses: 5
    Dernier message: 02/06/2006, 11h07
  5. Réponses: 13
    Dernier message: 14/09/2005, 16h21

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