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 sur tables formation, session


Sujet :

Langage SQL

  1. #1
    Membre régulier Avatar de djedje37et28
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    224
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 224
    Points : 84
    Points
    84
    Par défaut Requête sur tables formation, session
    Bonjour,

    J'ai quelques difficultés pour réaliser une requête sur des fiches formations.

    Les fiches formations sont reliées à aucune,1 ou plusieurs sessions par l'intermédiaire du champ id de la table formation et du champ idformation de la table session.

    Mes tables ressemblent donc à cela :
    une table formation (id,titre)
    une table session (id,idformation,debut,fin)


    Pour le moment ma requête renvoie les formations ayant une session sur une plage de dates.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT DISTINCT F.titre,F.id 
    FROM `formation` F, `session` S 
    WHERE  S.debut BETWEEN '2011-09-01' AND '2011-09-30'
      AND S.idformation = F.id 
      AND S.debut >'2011-09-16' 
    ORDER BY titre
    Néanmoins, certaines formations n'ont pas de session car elle court sur l'année. Ainsi, j'aimerai que ma requête affiche en plus ces formations n'ayant pas d'enregistrement dans la table session.

    Faut il utiliser count, is null ?

    Merci de votre aide

    Cordialement

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 793
    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 793
    Points : 34 024
    Points
    34 024
    Billets dans le blog
    14
    Par défaut
    Apprends les jointures normalisées depuis 1992 et tu découvriras la jointure externe (LEFT JOIN) qui devrait t'être très utile !
    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
    Membre régulier Avatar de djedje37et28
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    224
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 224
    Points : 84
    Points
    84
    Par défaut
    Merci Cinephil !

    J'ai pu le faire j'y prend goût !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT DISTINCT F.titre,F.id 
    FROM `formation` F
    LEFT OUTER JOIN `session` S
    ON F.id = S.idformation
    WHERE  S.debut BETWEEN '2011-09-01' AND '2011-09-30'
      AND S.debut >'2011-09-16' OR S.idformation IS NULL
    ORDER BY titre;
    Je vais maintenant complexifier la chose car au départ la requête porte sur plusieurs critères qui s'empilent :
    -Plage de dates
    -domaine
    -sous domaine
    -région
    -mot clés

    La région étant lié à la session !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT DISTINCT F.qualifiante,F.titre,F.reference,F.duree,F.dureedetail,F.id FROM `formation` F, `ville` V, `session` S
    WHERE
    1=1
    AND S.debut BETWEEN '2011-09-01' AND '2011-09-30'AND S.idformation = F.id AND S.debut >'2011-09-16'
    AND F.idclassification =19 AND F.idsclassification =58
    AND F.iddomaine =36 AND V.idregion = 2
    AND S.idformation = F.id AND V.id=S.idville
    AND ( keywords LIKE '%test%' ) ORDER BY titre

    J'essaye de retravailler cette requête en partant de tes conseils

  4. #4
    Membre régulier Avatar de djedje37et28
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    224
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 224
    Points : 84
    Points
    84
    Par défaut
    Et voici le résultat :
    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
    SELECT DISTINCT F.qualifiante, F.titre, F.reference, F.duree, F.dureedetail, F.id
    FROM `formation` F
    LEFT OUTER JOIN `session` S ON F.id = S.idformation
    LEFT OUTER JOIN `ville` V ON V.id = S.idville
    WHERE (
    (
    S.debut
    BETWEEN '2011-09-01'
    AND '2011-09-30'
    AND S.debut & gt;
     
    '2011-09-16'
    ) OR (
    S.idformation IS NULL
    )
    ) AND (
    F.idclassification =19
    ) AND (
    F.idsclassification =58
    ) AND (
    V.idregion =2 OR V.idregion IS NULL
    ) AND (
    keywords LIKE '%test%'
    ) ORDER BY titre;
    Quelques tests de valeurs pour être sur maintenant.

    Merci !

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

Discussions similaires

  1. Requêtes sur tables multiples
    Par rodjeur dans le forum Développement de jobs
    Réponses: 7
    Dernier message: 23/05/2012, 12h02
  2. requête sur table de jointure
    Par MistyMan dans le forum Requêtes
    Réponses: 1
    Dernier message: 13/02/2009, 20h21
  3. Requête sur table liée non nulle
    Par MistyMan dans le forum Requêtes
    Réponses: 4
    Dernier message: 06/02/2009, 13h44
  4. Requête sur table avec beaucoup de champs
    Par Lideln75 dans le forum Requêtes
    Réponses: 16
    Dernier message: 04/12/2008, 03h37
  5. Requête sur table à double clés primaires
    Par darkian dans le forum Langage SQL
    Réponses: 4
    Dernier message: 04/03/2005, 18h28

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