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

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Select sur plusieurs tables et clause left outer join

Re: Select sur plusieurs tables et clause left outer join

par @rthur » 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>

Re: Select sur plusieurs tables et clause left outer join

par sandy2626 » 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

Re: Select sur plusieurs tables et clause left outer join

par sandy2626 » 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...

Re: Select sur plusieurs tables et clause left outer join

par sandy2626 » 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

Re: Select sur plusieurs tables et clause left outer join

par ynx » 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

Select sur plusieurs tables et clause left outer join

par sandy2626 » 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