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 :

Restriction d'une requete en se basant sur une table de jointure


Sujet :

Requêtes MySQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 19
    Points : 9
    Points
    9
    Par défaut Restriction d'une requete en se basant sur une table de jointure
    Bonjour,

    J'ai un besoin assez simple mais je bloque dessus ...

    J'ai
    - une table qui liste des sessions de cours.
    - une table qui liste des périodes de l'année (où des sessions peuvent avoir lieu), périodes qui ont une date de début, et une date de fin.
    - une table qui regroupant la liste des couples uniques (id_session, id_periode) afin de savoir sur quelles périodes de l'année peuvent survenir les sessions de cours.

    J'ai besoin de lister toutes les sessions attachées à la période courante

    J'avais fait un truc comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT 
    <mes champs>
    FROM session s
    LEFT JOIN session_periode sp ON (sp.id_session = s.id) 
    LEFT JOIN periode p ON (sp.id_periode = p.id) 
    WHERE ((p.per_debut <= '<la_date>') AND (p.per_fin >= '<la_date>'))
    Sauf que dans le cas où ma session est associée à une période passée ET une période présente, elle ne sort pas. Forcément, mon ID de session peut exister plusieurs fois dans ma table session_periode

    J'ai testé de chercher dans une requete à part la liste des périodes présentes et de mettre un WHERE id_periode IN (<liste des périodes>). Mais c'est pareil.

    Je m'y prends mal, ça j'ai bien compris ... Mais je ne sais pas comment m'en sortir ... Un coup de pouce ?

  2. #2
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    salut,

    tu as l'opérateur between pour tester un intervalle... plus propre et compact

    pas besoin de toutes les parenthèse que tu mets partout...

    ensuite, là tu veux restreindre la liste des couples donc donc c'est inner join, left join sert quand tu veux lister quand même une ligne de la table dans le from même si là table dans le left ne te renvoie pas de ligne... et c'est mieux de mettre dans la jointure les condition de jointure...


    ici l'articulation se fait sur session_periode
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT 
    <mes champs>
    FROM session_periode sp 
    inner JOIN session s ON sp.id_session = s.id 
    inner JOIN periode p ON sp.id_periode = p.id and '<la_date>' between p.per_debut  AND p.per_fin
    sur le principe tu peux changer la table d'articulation de la requête en la réorganisant
    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 19
    Points : 9
    Points
    9
    Par défaut
    Ah merci !! Je connaissais pas le BETWEEN, et j'aurais pas du tout pensé faire ma requete dans ce "sens" là ...

    Je les fais toujours dans le mauvais sens du coup ...

    Je vais tester et je reviens mettre le poste en résolu, merci beaucoup !!!!

Discussions similaires

  1. Réponses: 1
    Dernier message: 28/01/2015, 15h05
  2. Java Geotools : Ajouter une nouvelle couche se basant sur une requête SQL
    Par cgi.vnf dans le forum SIG : Système d'information Géographique
    Réponses: 0
    Dernier message: 07/07/2014, 14h37
  3. [XL-2007] Remplacer contenu d'une cellule en se basant sur une liste pré-établie
    Par Unbreakable72 dans le forum Excel
    Réponses: 2
    Dernier message: 27/11/2013, 15h54
  4. [XL-2002] Ecouter un evenement sur une cellule et le reproduire sur une autre cellule
    Par kulnae dans le forum Macros et VBA Excel
    Réponses: 28
    Dernier message: 17/08/2009, 21h21
  5. Faire une somme en se basant sur une valeur donnée
    Par caco92 dans le forum Formules
    Réponses: 2
    Dernier message: 09/10/2008, 11h39

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