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 qui sort les 0 et aussi les NULL


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2011
    Messages : 22
    Par défaut Requête qui sort les 0 et aussi les NULL
    Bonjour,

    J'ai trois 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
    CREATE TABLE IF NOT EXISTS `praticiens` (
      `Id` int(11) NOT NULL AUTO_INCREMENT,
      `pseudo` varchar(50) NOT NULL,
      `password` varchar(50) NOT NULL,
      `email` varchar(50) NOT NULL,
      `titre` smallint(6) NOT NULL DEFAULT '0',
      `prenom` varchar(75) NOT NULL,
      `nom` varchar(75) NOT NULL,
      `birth_date` date NOT NULL,
      `store_date` datetime NOT NULL,
      `IP_ad` varchar(15) DEFAULT NULL,
      `visible` int(11) NOT NULL DEFAULT '0',
      `email_vis` tinyint(1) NOT NULL DEFAULT '1',
      `level` int(11) NOT NULL DEFAULT '1',
      PRIMARY KEY (`Id`),
      UNIQUE KEY `email` (`email`),
      UNIQUE KEY `pseudo` (`pseudo`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;
     
    CREATE TABLE IF NOT EXISTS `praticiens_courses` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `id_praticien` int(11) NOT NULL,
      `id_course` int(11) NOT NULL,
      `id_organisme` int(11) NOT NULL,
      `year_course` year(4) NOT NULL,
      `course_valid` tinyint(1) NOT NULL DEFAULT '0',
      `filename` varchar(255) DEFAULT NULL,
      `file_Id` varchar(255) DEFAULT NULL,
      PRIMARY KEY (`id`),
      UNIQUE KEY `id_praticien` (`id_praticien`,`id_course`,`year_course`),
      KEY `date_user` (`id_praticien`,`year_course`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;
     
    CREATE TABLE IF NOT EXISTS `courses_label` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `label` varchar(255) NOT NULL,
      `id_organisme` int(11) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
    Que je veux relier avec une requête qui devrait ressembler à quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT praticiens.prenom, praticiens.nom, praticiens_courses.id, praticiens_courses.year_course, praticiens_courses.file_Id, courses_label.label
    FROM praticiens
    JOIN praticiens_courses ON praticiens.Id = praticiens_courses.id_praticien
    JOIN courses_label ON praticiens_courses.id_course = courses_label.id
    WHERE praticiens_courses.course_valid =0
    ORDER BY praticiens.nom, praticiens.prenom
    Cette requête fonctionne mais est-il possible de sortir aussi les enregistrements de la table praticiens qui n'ont pas d'enregistrements dans praticiens_courses ?

  2. #2
    Membre Expert 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
    Par défaut
    Regardez du coté des jointures externes ...

    Bon courage

  3. #3
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2011
    Messages : 22
    Par défaut
    J'ai essayé avec un LEFT JOIN mais alors la requête donne toujours un résultat vide : A mon avis à cause du WHERE qui ne marche plus.

    Et il faut aussi que je supprime le deuxième JOIN pour avoir une table qui n'est pas filtrée...

  4. #4
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 954
    Par défaut
    Et comme ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT p.prenom, p.nom, pc.id, pc.year_course, pc.file_Id, cl.label
      FROM praticiens p
      left JOIN praticiens_courses pc ON p.Id = pc.id_praticien and pc.course_valid = 0
      left JOIN courses_label cl ON pc.id_course = cl.id
     ORDER BY p.nom, p.prenom
    Regarde Jointure externe et condition de restriction sur le blog de CinéPhil

  5. #5
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2011
    Messages : 22
    Par défaut
    Cette requête a donné le résultat attendu !

  6. #6
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2011
    Messages : 22
    Par défaut
    Je reviens sur cette requete qui retournait (à cause du LEFT JOIN sur pc_couse_valid) les cabinets validés.
    J'ai donc modifié de la sorte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT p.prenom, p.nom, pc.id, pc.year_course, pc.file_Id, cl.label
      FROM praticiens p
      LEFT JOIN praticiens_courses pc ON p.Id = pc.id_praticien 
      LEFT JOIN courses_label cl ON pc.id_course = cl.id
    WHERE pc.course_valid = 0
    ORDER BY p.nom, p.prenom

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

Discussions similaires

  1. Lister les disques durs USB, les clés ainsi que les appareils photos
    Par infosam76 dans le forum VB 6 et antérieur
    Réponses: 17
    Dernier message: 25/02/2015, 23h26
  2. Réponses: 1
    Dernier message: 04/07/2013, 10h23
  3. [MySQL] Une requête qui ne marche pas sur tous les enregistrements
    Par Marc22 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 21/04/2010, 13h20
  4. Réponses: 2
    Dernier message: 25/11/2007, 16h37
  5. Requête qui récupère les droits d'un utilisateur
    Par peck dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 20/04/2006, 09h40

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