LEFT JOIN complexe

Petit nouveau ! | 5 Messages

13 janv. 2009, 18:44

Salut :wink:

J'ai besoin d'un peu d'aide pour une requête donc si vous avez un peu de temps, un Grand Merci :wink:

En fait, j'ai une table "tusers" qui contient :
id_use
nom_use

Voici par exemple les deux premiers enregistrements :
1, Dupont, Jean
2, Durand, Pierre

et une autre table tstockoxy qui contient
id_stockoxy
numtec_stockoxy
numtecrep_stockoxy

Voici les deux premiers enregistrements :

1, 1, 2
1, 2, 2

Les champs numtec_stockoxy et numtecrep_stockoxy sont liés à id_use de la table tusers.

Ce que je veux faire c'est afficher un tableau qui reprend les noms des utilisateurs au lieu de leur numéro d'identification, donc si on reprend le même exemple ci-dessus, on obtiendrait :

1, Dupont, Durand
2, Durand, Durand

Avec la requête :

Code : Tout sélectionner

SELECT id_stocko, numbl_stocko, dateliv_stocko, denom_stocko, numlot_stocko, numbout_stocko, etat_stocko, dispo_stocko, numtec_stocko, datemes_stocko, datesortie_stocko, daterep_stocko, numtecrep_stocko, numpat_stocko, retouras_stocko, departas_stocko, id_pat, nom_pat, id_use, nom_use FROM tstockoxy LEFT JOIN tpatient ON tpatient.id_pat = tstockoxy.numpat_stocko LEFT JOIN tusers ON (tusers.id_use = tstockoxy.numtec_stocko) OR (tusers.id_use = tstockoxy.numtecrep_stocko)
Ca ne fonctionne pas car on a pas la distinction entre numtec_stockoxy et numtecrep_stockoxy

Une idée, un conseil un avis ?

Merci :wink:

ViPHP
AB
ViPHP | 5818 Messages

13 janv. 2009, 21:17

Faudrait suivre les conseils de mise en forme et de renseignements qui s'affichent quand on poste dans le forum sql. Cela serait plus clair, nous permettrait si besoin de faire des test et tu aurais plus de réponses :wink:

Eléphant du PHP | 254 Messages

13 janv. 2009, 22:47

Salut

Visiblement faut que tu joigne deux fois la table user, un peu dans ce style la :

Code : Tout sélectionner

SELECT t.id_stocko, t1.nom_use , t2.nom_use FROM tstockoxy t LEFT JOIN tusers t1 ON t1.id_use = t.numtec_stocko LEFT JOIN tusers t2 ON t2.id_use = t.numtecrep_stocko;

Petit nouveau ! | 5 Messages

14 janv. 2009, 11:37

Merci c'est ça mais ça ne fonctionne pas quand je fais :

Code : Tout sélectionner

SELECT id_stocko, numbl_stocko, dateliv_stocko, denom_stocko, numlot_stocko, numbout_stocko, etat_stocko, dispo_stocko, numtec_stocko, datemes_stocko, datesortie_stocko, daterep_stocko, numtecrep_stocko, numpat_stocko, retouras_stocko, departas_stocko, id_pat, nom_pat, u1.id_use, u2.id_use, u1.nom_use, u2.nom_use FROM tstockoxy LEFT JOIN tpatient ON tpatient.id_pat = tstockoxy.numpat_stocko LEFT JOIN tusers u1 ON u1.id_use = tstockoxy.numtec_stocko LEFT JOIN tusers u2 ON u2.id_use = tstockoxy.numtecrep_stocko
et que j'affiche avec :

<?php echo $row_rstraceo2['u1.id_use']; ?>

je n'obtiens aucune donnée !

Une petite idée.

Merci ;)

Eléphant du PHP | 254 Messages

14 janv. 2009, 12:05

Et si tu balance ta requete dans mysql directement ca donne quoi ?

Petit nouveau ! | 5 Messages

14 janv. 2009, 12:12

Ca y'est résolu, en fait il faut créer des Alias pour ceux que ça interesserait.

Donc la requête est :

Code : Tout sélectionner

SELECT id_stocko, numbl_stocko, dateliv_stocko, denom_stocko, numlot_stocko, numbout_stocko, etat_stocko, dispo_stocko, numtec_stocko, datemes_stocko, datesortie_stocko, daterep_stocko, numtecrep_stocko, numpat_stocko, retouras_stocko, departas_stocko, id_pat, nom_pat, u1.id_use AS id1, u2.id_use AS id2, u1.nom_use AS nom1, u2.nom_use AS nom2 FROM tstockoxy LEFT JOIN tpatient ON tpatient.id_pat = tstockoxy.numpat_stocko LEFT JOIN tusers u1 ON u1.id_use = tstockoxy.numtec_stocko LEFT JOIN tusers u2 ON u2.id_use = tstockoxy.numtecrep_stocko
Merci à tous pour votre aide ;)