Requete MYSQL problématique

WRInaute impliqué
Salut,

Je me prend la tete deuis un petit bout de temps avec une requete mysql

j'ai 2 tables :

la premiere :

Code:
id     lib 
--     -------
1      aaaaa
2      bbbbb
3      ccccc

la 2 eme

Code:
user   val1   val2 val3  id1eretable
----    ----    ----  ----   -------------

111    100    50    0     1 
111    0       0    10    2
222    20    20     20    1

je voudrait avoir en resultat pour le user 111

Code:
1  aaaaa  100   50  0 
2  bbbbb  0      0    10 
3  ccccc   nul  nul   nul

j'ai essayé avec la requete suivante :

Code:
select d.id as id, d.lib as lib, b.val1 as val1, b.val2 as val2, b.val3 as val3  
from table1 as d left join table2 as b  on d.id = b.id 
where (b.user='111')

mais ca ne marche pas, ca ne me renvoie pas la ligne 3 ccccc nul nul nul

une idée ?
 
WRInaute passionné
[/code]SELECT table1.id, table1.lib, table2.val1, table2.val2, table2.val3 FROM table1 LEFT JOIN table2 ON table1.id = table2.id1eretable WHERE table2.user = 111;[/code]
A noter que dans ton exemple, le dernier code, ton LEFT JOIN table2 AS b ON d.id = b.id, le b.id n'existe pas dans ton exemple, alors pas sûr que tu n'ais pas fait une faute de frappe :p
Sinon, ta requête me semble correcte.

NB: pour bien différencier opérateur, il faut mettre en majuscule tout ce qui est MySQL propre (SELECT / FROM / WHERE / ON / AS / LEFT JOIN ...) ça permet de lire le tout plus vite :p
 
WRInaute impliqué
Merci,

Comme c'est un exemple, je me suis un peu emmelé les crayons, je remet la requete au propre :

Code:
SELECT d.id as id, d.lib as lib, b.val1 as val1, b.val2 as val2, b.val3 as val3 
FROM table1 as d LEFT JOIN table2 as b  ON d.id = b.id1eretable
WHERE (b.user='111')

mais elle ne me remonte que 2 lignes et toujours pas la 3eme

Code:
3  ccccc   nul  nul   nul
 
WRInaute accro
C'est parce que ton LEFT JOIN est "à l'envers". LEFT JOIN renvoie toutes les lignes de la première table (qui correspondent aux critères du WHERE), avec en face les lignes de la deuxième table qui vont avec. Là, tu veux toutes les lignes de ta deuxième table, avec éventuellement les données de la première s'il y en a. Il faut donc que tu fasses un table2 left join table1, ou un table1 right join table2 (je conseille plutôt le premier, c'est plus "intuitif", surtout si tu as beaucoup de jointures).

Jacques.
 
WRInaute impliqué
Non, c'est bien tous les champs de la 1ere complété des valeurs trouvées dans la 2eme ou NULL.


Ca y est j'ai trouvé , en fait il faut que j'inclue ma clause dans le 0N et non dans le WHERE ce qui donne :
Code:
SELECT d.id as id, d.lib as lib, b.val1 as val1, b.val2 as val2, b.val3 as val3
FROM table1 as d LEFT JOIN table2 as b  ON ( d.id = b.id1eretable AND b.user='111' )

et la ca marche :D (comme quoi la persévérence paye :wink: )
 
Discussions similaires
Haut