[RESOLU] Select sur plusieurs tables et clause left outer join

Eléphanteau du PHP | 39 Messages

16 févr. 2016, 13:59

Bonjour a tous,
Je ne savais pas si je devais poster ma question sur le forum php ou celui de sql, jel'ai finalement poste ici. merci aux admin de le deplacer si il n'est pas a sa place :wink:

Ma question est la suivante, j'essaye désespérément de finir a bout de cette requete mais je n'y arrive pas. Sur phpmyadmin elle me donne l'erreur suivante :
"1054 : unknown column c.iddomicile in on clause".
Grosso modo j'ai le schema suivant :
table clients :
id,
nom,
prenom,
...,
iddomcile,
idtravail

table adresses:
id,
numero,
rue,
ville,
etc..

et des jointures avec d'autres tables pour des besoins de donnees.
je voudrai alimente un tableau en php qui contient les donnees du client avec entre autre son adresse de domicile et son adresse de travail.
$queryservices = $server->query("SELECT relations_client_professionel.idprofessionel, 				
												types_professionel.nom as nomservice,
												types_professionel.id as idtypepro,
												professionels.nom as nomprofessionel,
												c.id as idclient,
												c.nom as nomclient,
												c.prenom as prenomclient,
												c.iddomicile,
												c.idtravail,
												c.idtype,
												c.telephone,
												c.email,
												c.pass,
												c.age,
												c.sexe,
												c.idimg,
												c.is_active,
												d.adresse_domicile,
												d.ville_domicile,
												d.codepostal_domicile,
												d.pays_domicile,
												t.adresse_travail,
												t.ville_travail,
												t.codepostal_travail,
												t.pays_travail,
												images.url as url
											FROM 	relations_client_professionel, 
													professionels, 
													types_professionel ,
													clients as c,
													images
												left outer join adresses as d on d.id = c.iddomicile
 												left outer join adresses as t on t.id = c.idtravail
 												WHERE relations_client_professionel.idclient=c.id
												AND professionels.idlogo=images.id
												AND relations_client_professionel.idemail=c.email
												AND relations_client_professionel.idprofessionel = professionels.id 
												AND professionels.idtype = types_professionel.id
												AND c.id='".$idclient."'");
Merci inginiment pour votre aide, je commence a etre en retard dans mon boulot, je devais finir ce travail hier :oops:

Cordialement
Sandy

ynx
Mammouth du PHP | 586 Messages

16 févr. 2016, 17:09

Salut,

Il me semble que ta table client devrait également faire l'objet d'une jointure :
SELECT ...
FROM relations_client_professionel
LEFT OUTER JOIN clients c ON ... clause_on_clients ...
LEFT OUTER JOIN adresses d ON d.id = c.iddomicile
Au passage, les deux jointures sur la table adresses ne pourrait-elles pas être rassemblées en une seule comme ceci ?
SELECT ...
FROM relations_client_professionel
LEFT OUTER JOIN clients c ON ... clause_on_clients ...
LEFT OUTER JOIN adresses d ON (d.id = c.iddomicile OR d.id = c.idtravail)
Bonne journée

Eléphanteau du PHP | 39 Messages

16 févr. 2016, 18:06

merci ynx
mais je ne comprends pas, elle y ait la clause.j'ai un peu mieux écrit ma requête mais j'ai toujours l'erreur
SELECT r.idprofessionel, 				
tp.nom as nomservice,
tp.id as idtypepro,
p.nom as nomprofessionel,
c.id as idclient,
c.nom as nomclient,
c.prenom as prenomclient,
c.iddomicile,
c.idtravail,
c.idtype,
c.telephone,
c.email,
c.pass,
c.age,
c.sexe,
c.idimg,
c.is_active,
d.adresse_domicile,
d.ville_domicile,
d.codepostal_domicile,
d.pays_domicile,
t.adresse_travail,
t.ville_travail,
t.codepostal_travail,
t.pays_travail,
i.url as url
FROM 	relations_client_professionel as r, 
		professionels as p, 
		types_professionel as tp,
		clients as c,
		images as i
left outer join adresses as d on d.id = c.iddomicile
left outer join adresses as t on t.id = c.idtravail
WHERE r.idclient=c.id
AND p.idlogo=i.id
AND r.idemail=c.email
AND r.idprofessionel = p.id 
AND p.idtype = tp.id
AND c.id=4551
Je désespére. je stresse de ce boulot en retard. ca n'est pas dans mes habitudes.
avez-vous une autre suggestion ?
merci

Eléphanteau du PHP | 39 Messages

16 févr. 2016, 21:39

ca y est j'y suis presque. voila ce que ca donne :
SELECT r.idprofessionel, 
p.nom as nomprofessionel,
tp.nom as nomservice,
tp.id as idtypepro,
c.id as idclient,
c.nom as nomclient,
c.prenom as prenomclient,
c.iddomicile,
d.adresse as adresse_domicile, 
t.adresse as adresse_travail,
c.idtravail,
c.idtype,
c.telephone,
c.email,
c.pass,
c.age,
c.sexe,
c.idimg,
c.is_active,
i.url as url
FROM 	relations_client_professionel as r, 
		professionels as p,
		images as i, 
		types_professionel as tp,
		clients as c
left outer join adresses as d on d.id = c.iddomicile 
left outer join adresses as t on t.id = c.idtravail
WHERE  c.id=4551
AND r.idemail=c.email
AND r.idprofessionel = p.id 
AND p.idlogo=i.id
AND p.idtype = tp.id

Mais e n'ai pas termine. Je dois rajouter dans mon adresse_domicile la ville, le code postal et le pays. idem pour l'adresse_travail.
Mais la ou ca se corse c'est que ces informations sont dans 2 autres tables . Ma table ADRESSES contient une colonne idville qui me permet de recuperer la ville et son code postal dans la table VILLES et j'y trouve aussi le idpays qui me permet de receuperer le pays dans la table PAYS.
VILLES
id
ville
codepostal
idpays

PAYS
id
pays


Est ce que ca vous parle ? Parceque moi pas dutout...

Eléphanteau du PHP | 39 Messages

17 févr. 2016, 11:23

Bonjour a tous

Mon probleme est resolu je vous affiche mon code ca peut aider a d'autre

Code : Tout sélectionner

SELECT r.idprofessionel, p.nom as nomprofessionel, tp.nom as nomservice, tp.id as idtypepro, c.id as idclient, c.nom as nomclient, c.prenom as prenomclient, c.iddomicile, d.adresse as adresse_domicile, vd.nom as ville_domicile, vd.codepostal as codepostal_domicile, pd.nom as pays_domicile, t.adresse as adresse_travail, vt.nom as ville_travail, vt.codepostal as codepostal_travail, pt.nom as pays_travail, c.idtravail, c.idtype, c.telephone, c.email, c.pass, c.age, c.sexe, c.idimg, c.is_active, i.url as url FROM relations_client_professionel as r, professionels as p, images as i, types_professionel as tp, clients as c left outer join adresses as d on d.id = c.iddomicile left outer join adresses as t on t.id = c.idtravail left outer join villes as vd on vd.id = d.idville left outer join villes as vt on vt.id = t.idville left outer join pays as pd on pd.id = vd.idpays left outer join pays as pt on pt.id = vt.idpays WHERE c.id=4567 AND r.idemail=c.email AND r.idprofessionel = p.id AND p.idlogo=i.id AND r.idprofessionel = 98
Merci et a bientot

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

20 févr. 2016, 00:24

Mon probleme est resolu je vous affiche mon code ca peut aider a d'autre
Merci pour le partage de la solution =D>
Quand tout le reste a échoué, lisez le mode d'emploi...