Précédent   Forum des professionnels en informatique > Bases de données > MySQL
MySQL Forum d'entraide MySQL. Avant de poster -> FAQ MySQL, Tutoriels 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 10/11/2011, 23h27   #1
Invité régulier
 
Inscription : septembre 2007
Messages : 30
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 30
Points : 8
Points : 8
Par défaut Problème de jointure et condition

Bonjour,

Enoncé :
j'ai des annonces qui sont posté par des utilisateurs (account). ces même utilisateurs ont plusieurs commerce ou pas du tout. Chaque utilisateur et chaque commerce sont associé à une Référence Province.

J'aimerais juste récupéré l'id de l'annonce (table annonce) avec la province de l'utilisateur (table account) ou avec la province du commerce si elle est spécifié dans l'annonce (à la place de la province de l'utilisateur).

Pour le moment, c'est chaque fois la province de l’utilisateur qui est renvoyé et je ne parviens pas à récupéré la province du commerce quand sa référence n'est pas NULL dans l'annonce. Je pense que mom problème est dans ma jointure entre account et region mais comment faire une jointure sous condition concernant la Ref_Commerce à NULL ???

Est ce que quelqu'un aurait une idée, parceque je nage ? Merci d'avance

Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
SELECT annonce.Ref, province.Ref, province.nom
FROM annonce
 
LEFT JOIN account AS `AccountR` ON ( `Annonce`.`Ref_Account` = `AccountR`.`Ref` )
LEFT JOIN region AS `Region` ON ( `AccountR`.`Ref_Commune` = `Region`.`Ref` )
LEFT JOIN province AS `Province` ON ( `Region`.`Ref_Province` = `Province`.`Ref` )
LEFT JOIN `commerce` AS `Commerce` ON ( `Annonce`.`Ref_Commerce` = `Commerce`.`Ref` )
 
AND ( 
(annonce.Ref_Commerce IS NOT NULL AND commerce.Actif =1) 
    OR annonce.Ref_Commerce IS NULL)
flagodzki est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/11/2011, 16h43   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 11 029
Points : 18 328
Points : 18 328
Envoyer un message via MSN à CinePhil
Il faut une deuxième instance de la table province. En supposant qu'il y a une association directe entre commerce et province, essaie comme ça :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
SELECT annonce.Ref, 
	CASE 
		WHEN p2.Ref IS NOT NULL THEN p2.Ref
		ELSE p.Ref
	END AS Ref_Province, 
	CASE 
		WHEN p2.Ref IS NOT NULL THEN p2.nom
		ELSE p.nom 
	END AS nom_province
FROM annonce a
LEFT JOIN account ac ON ac.Ref_Account = ac.Ref
	LEFT JOIN region r ON ac.Ref_Commune = r.Ref
		LEFT JOIN province p ON r.Ref_Province = p.Ref
LEFT JOIN commerce c ON a.Ref_Commerce = c.Ref
	LEFT JOIN province p2 ON c.Ref_Province = p2.Ref
	AND 
	( 
		(
			annonce.Ref_Commerce IS NOT NULL 
			AND commerce.Actif = 1
		) 
		OR annonce.Ref_Commerce IS NULL
	)
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/11/2011, 11h19   #3
Invité régulier
 
Inscription : septembre 2007
Messages : 30
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 30
Points : 8
Points : 8
Super Génial, un tout grand merci mais encore une petite question.

Avec cette manière de procéder, si vous permettez je vais pousser le raisonnement encore un peu plus loin.

Si maintenant à la place de renvoyer une liste je veut renvoyer le nombre d'annonce par province en une seul requête, est ce possible ?

merci d'avance,
flagodzki est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/11/2011, 19h09   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 11 029
Points : 18 328
Points : 18 328
Envoyer un message via MSN à CinePhil
Essaie ceci :
Code :
1
2
3
4
5
6
7
8
9
10
11
SELECT p.Ref AS Ref_Province, 
	p.Nom AS Nom_Province,
	COUNT(a.*) AS nb_annonces_account_region,
	COUNT(a2.*) AS nb_annonces_commerce
FROM province p
LEFT OUTER JOIN region r ON r.Ref_Province = p.Ref
	LEFT OUTER JOIN account ac ON ac.Ref_Commune = r.Ref
		LEFT OUTER JOIN annonce a ON a.Ref_Account = ac.Ref
LEFT OUTER JOIN commerce c ON c.Ref_Province = p.Ref
	LEFT OUTER JOIN annonce a2 ON a2.Ref_Commerce = c.Ref
GROUP BY p.Ref, p.Nom
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/11/2011, 22h34   #5
Invité régulier
 
Inscription : septembre 2007
Messages : 30
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 30
Points : 8
Points : 8
vraiment un tout grand merci.
flagodzki 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 06h42.


 
 
 
 
Partenaires

Hébergement Web