[SQL] LEFT JOIN (2x)

Pagina: 1
Acties:

  • GoVegan
  • Registratie: Juni 2002
  • Laatst online: 16-08 22:25
kwam er net achter dat subquerys niet willen in mysql (niet in versie 3 iedergeval)
en probeer nu wat met joins,
als volgt:
kheb hier 3 tabelen.

USERS:
- id
- name
- en nog wat dingen

VERSLAG:
- id
- userid
- en nog wat dingen

FOTO:
- id
- userid
- en nog wat dingen

zoals je al wel na kunt gaan word er bij foto's en verslagen bij de de userid, het id neergezet van de desbetrefende user. (users.id).
nu wil ik graag in 1 query een overzicht krijgen hoeveel verslagen en foto's de gebruiker hebben.

ik heb het volgende geprobeerd:

SELECT users.id, users.name, COUNT(verslag.userid) AS verslagen, COUNT(foto.userid) AS fotos
FROM users LEFT JOIN verslag ON verslag.userid=users.id LEFT JOIN foto ON foto.userid=users.id
GROUP BY users.id

maar hier klopen de aantalen niet.
wanneer ik het volgene probeer wel:

SELECT users.id, users.name, COUNT(verslag.userid) AS verslagen
FROM users LEFT JOIN verslag ON verslag.userid=users.id
GROUP BY users.id

maar dan heb ik alleen maar de verslagen.

kan iemand mij vertellen wat ik hier fout doen en hoe ik het wel zou moeten doen.
kgeloof dat dit toch wel moet kunnen mbv joins..

peter

wat zei ik nou net? :/

[ Voor 4% gewijzigd door curry684 op 15-09-2003 00:51 ]


Verwijderd

Zoiets denk ik:

SELECT users.id,
users.name,
COUNT(verslag.userid) AS verslagen,
COUNT(foto.userid) AS fotos

FROM ((users LEFT JOIN verslag ON verslag.userid=users.id)
LEFT JOIN foto ON foto.userid = users.id)

GROUP BY users.id

Het moet trouwens ook zo kunnen volgens mij:

SELECT users.id,
users.name,
COUNT(verslag.userid) AS verslagen,
COUNT(foto.userid) AS fotos

from users,verlag,foto

where verslag.userid = users.id AND foto.userid = users.id

group by users.id

[ Voor 31% gewijzigd door Verwijderd op 15-09-2003 00:52 . Reden: Tweede mogelijkheid ]


  • GoVegan
  • Registratie: Juni 2002
  • Laatst online: 16-08 22:25
Verwijderd schreef op 15 September 2003 @ 00:47:
Zoiets denk ik:

SELECT users.id,
users.name,
COUNT(verslag.userid) AS verslagen,
COUNT(foto.userid) AS fotos

FROM ((users LEFT JOIN verslag ON verslag.userid=users.id)
LEFT JOIN foto ON foto.userid = users.id)

GROUP BY users.id

Het moet trouwens ook zo kunnen volgens mij:

SELECT users.id,
users.name,
COUNT(verslag.userid) AS verslagen,
COUNT(foto.userid) AS fotos

from users,verlag,foto

where verslag.userid = users.id AND foto.userid = users.id

group by users.id
nop werken bij hier niet. maar met die eerste manier kan ikzelf ff wat verder puzzelen.

Verwijderd

Je wil alle gebruikers hebben, het probleem is dat je het nu het resultaat van alle verslagen krijgt. Je moet dus of right join users doen, of met users beginnen en dan de andere twee left joinen.