[RESOLU] jointures et clause where

Eléphanteau du PHP | 46 Messages

23 déc. 2013, 12:56

Bonjour à tous
j'aurais besoin d'un petit coup de main sur les jointures, il y a une requête que je n'arrive pas à écrire
soit une table agents et une table infos
Image

si je souhaites avoir le champ info pour chaque agent (même ceux qui n'ont pas d'info) la requête suivante fonctionne:
SELECT ag.nom, ag.prenom, inf.info      FROM agents AS ag     LEFT JOIN   infos AS inf     ON ag.id = inf.agent_id
Image

Mon problème, c'est que je voudrais la même chose mais avec le critere type_info='type2'
Ma requete ne marche pas, elle est surement mal construite (j'ai juste rajouté un WHERE)
SELECT ag.nom, ag.prenom, inf.info      FROM agents AS ag     LEFT JOIN   infos AS inf     ON ag.id = inf.agent_id   WHERE inf.type_info = 'type2'
elle me renvoie une seule ligne:
nom2 || prenom2 || info DEUX agent 2

et moi ce que je voudrais c'est çà:
nom1 || prenom1 || NULL
nom2 || prenom2 || info DEUX agent 2
nom3 || prenom3 || NULL
nom4 || prenom4 || NULL
nom5 || prenom5 || NULL
nom6 || prenom6 || NULL

C'est surement ma clause WHERE qui est pas au bon endroit
ou alors ma jointure qui n'est pas bonne
j'ai tourné çà dans tous les sens je bloque ....
je dois être étanche à la logique des JOIN.....
help :?

Mammouth du PHP | 571 Messages

23 déc. 2013, 14:08

bonjour,

essaies de faire une union :
(SELECT ag.nom, ag.prenom, inf.info      FROM agents AS ag     LEFT JOIN   infos AS inf     ON ag.id = inf.agent_id   WHERE inf.type_info = 'type2')
UNION
(SELECT ag.nom, ag.prenom, inf.info      FROM agents AS ag     LEFT JOIN   infos AS inf     ON ag.id = inf.agent_id   )

Eléphanteau du PHP | 46 Messages

23 déc. 2013, 15:15

j'ai essayé ca marche pas, ca me renvoies çà:

nom2 prenom2 info DEUX agent 2
nom1 prenom1 info agent 1
nom2 prenom2 info UNE agent 2
nom3 prenom3 NULL
nom4 prenom4 NULL
nom5 prenom5 NULL
nom6 prenom6 NULL

merci pour ta réponse
je continue à chercher :-k

ViPHP
ViPHP | 2577 Messages

23 déc. 2013, 15:23

Peut être :
SELECT ag.nom, ag.prenom, inf.info    
FROM agents AS ag     
LEFT JOIN   infos AS inf     
ON ag.id = inf.agent_id  and inf.type_info = 'type2'
Mais je ne peux pas tester. j'ai juste remplacé where par and.

Eléphanteau du PHP | 46 Messages

23 déc. 2013, 15:31

YES YES YES
excellent çà marche
merci :D :D