Requete MYSQL problématique


ludoanimation
WRInaute impliqué
WRInaute impliqué
 
Messages: 770
Inscription: 25 Juil 2003

Requete MYSQL problématique

Message le Dim Oct 31, 2010 13:50

Salut,

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

j'ai 2 tables :

la premiere :

Code: Tout sélectionner
id     lib
--     -------
1      aaaaa
2      bbbbb
3      ccccc


la 2 eme

Code: Tout sélectionner
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: Tout sélectionner
1  aaaaa  100   50  0
2  bbbbb  0      0    10
3  ccccc   nul  nul   nul


j'ai essayé avec la requete suivante :

Code: Tout sélectionner
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 ?


Julia41
WRInaute passionné
WRInaute passionné
 
Messages: 1765
Inscription: 31 Aoû 2007

Re: Requete MYSQL problématique

Message le Dim Oct 31, 2010 14:31

[/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


ludoanimation
WRInaute impliqué
WRInaute impliqué
 
Messages: 770
Inscription: 25 Juil 2003

Re: Requete MYSQL problématique

Message le Dim Oct 31, 2010 15:31

Merci,

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

Code: Tout sélectionner
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: Tout sélectionner
3  ccccc   nul  nul   nul

jcaron
WRInaute accro
WRInaute accro
 
Messages: 2687
Inscription: 13 Fév 2004

Re: Requete MYSQL problématique

Message le Dim Oct 31, 2010 15:54

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.


ludoanimation
WRInaute impliqué
WRInaute impliqué
 
Messages: 770
Inscription: 25 Juil 2003

Re: Requete MYSQL problématique

Message le Dim Oct 31, 2010 16:27

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: Tout sélectionner
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: )


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité