Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/07/2011, 07h48   #1
Invité régulier
 
Homme
Développeur Web
Inscription : juin 2011
Messages : 21
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

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

Informations forums :
Inscription : juin 2011
Messages : 21
Points : 5
Points : 5
Par défaut Requête qui sort les 0 et aussi les NULL

Bonjour,

J'ai trois tables :

Code :
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 :
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 ?
somasimple est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 09h14   #2
Membre Expert
 
Avatar de Yanika_bzh
 
Homme Yannick
Ingénieur Etudes & Developpements
Inscription : février 2006
Messages : 1 125
Détails du profil
Informations personnelles :
Nom : Homme Yannick
Localisation : France, Deux Sèvres (Poitou Charente)

Informations professionnelles :
Activité : Ingénieur Etudes & Developpements
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2006
Messages : 1 125
Points : 1 670
Points : 1 670
Regardez du coté des jointures externes ...

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)
Yanika_bzh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 12h43   #3
Invité régulier
 
Homme
Développeur Web
Inscription : juin 2011
Messages : 21
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

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

Informations forums :
Inscription : juin 2011
Messages : 21
Points : 5
Points : 5
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...
somasimple est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 13h29   #4
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
Et comme ça ?
Code :
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
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2011, 15h06   #5
Invité régulier
 
Homme
Développeur Web
Inscription : juin 2011
Messages : 21
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

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

Informations forums :
Inscription : juin 2011
Messages : 21
Points : 5
Points : 5
Cette requête a donné le résultat attendu !
somasimple est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2011, 17h01   #6
Invité régulier
 
Homme
Développeur Web
Inscription : juin 2011
Messages : 21
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

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

Informations forums :
Inscription : juin 2011
Messages : 21
Points : 5
Points : 5
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 :
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
somasimple est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h30.


 
 
 
 
Partenaires

Hébergement Web