[MySQL] LEFT JOIN in plaats van subquery

Pagina: 1
Acties:

  • Maniakje
  • Registratie: Februari 2001
  • Laatst online: 20-01 20:20
Ik ben voor 'het grote Xbox topic' bezig met een website (zie sig ;)) maar ik loop nu tegen een probleem aan:

Ik heb de volgende tabellen:

Tabel: Games
GameIDTitle
1Top Spin
2Rainbow Six
3Unreal Championship
4Dead or Alive Online
5MechAssault

Tabel: Usergames
IDUserIDGameID
111
212
313
421
525
633

Dus
User 1 heeft Top Spin, Rainbox Six en Unreal.
User 2 heeft Top Spin en MechAssault.
User 3 heeft alleen Unreal.


Nu zoek ik een query waarmee ik van iedere user op kan vragen welke spellen die user niet heeft. Ik weet alleen niet hoe ik dat voor elkaar moet krijgen. Dus als ik de query uitvoer voor user 1 moet ik er DoA en MechAssault uit krijgen.

Aangezien subqueries niet mogelijk zijn in MySQL is het gebruik van NOT EXISTS en NOT IN niet mogelijk.

Het dichtstbij ben ik gekomen met
code:
1
2
3
4
SELECT g.gameid, title
FROM games AS g
LEFT JOIN usergames AS u ON u.gameid=g.gameid
WHERE u.gameid IS NULL


Daarmee krijg ik de games die niemand heeft, in mijn voorbeeld dus enkel Dead or Alive.

Hoe doe ik dit?

[ Voor 4% gewijzigd door Maniakje op 25-11-2003 20:20 ]

The sentence below is true.
The sentence above is false.


  • bigtree
  • Registratie: Oktober 2000
  • Laatst online: 31-03 15:20
UserID criterium toevoegen in je JOIN

Voor user 1:
SQL:
1
2
3
4
SELECT g.GameID, Title
FROM games AS g
LEFT JOIN Usergames AS u ON g.GameID = u.GameID AND u.UserID = 1
WHERE u.GameID IS NULL  

[ Voor 11% gewijzigd door bigtree op 25-11-2003 22:32 ]

Lekker woordenboek, als je niet eens weet dat vandalen met een 'n' is.


  • Bud_s
  • Registratie: Maart 2002
  • Laatst online: 25-05 18:29
met een group op UserID misschien ??

  • bigtree
  • Registratie: Oktober 2000
  • Laatst online: 31-03 15:20
Bud_s schreef op 25 november 2003 @ 22:40:
met een group op UserID misschien ??
Met een GROUP BY op UserID komen er natuurlijk nooit twee records voor user 1 terug... :Z ;)

Lekker woordenboek, als je niet eens weet dat vandalen met een 'n' is.


  • Bud_s
  • Registratie: Maart 2002
  • Laatst online: 25-05 18:29
group UserID, GameID dan ?

* Bud_s just trying to help :)

  • Maniakje
  • Registratie: Februari 2001
  • Laatst online: 20-01 20:20
Thx Bigtree, dat is ie. :*)

Ik had dat AND .... wel al achter WHERE gezet. Ik had er helemaal niet bij stilgestaan dat je dat ook bij de join kunt doen. Achteraf gezien is het natuurlijk weer simpel. :)

The sentence below is true.
The sentence above is false.


  • Bud_s
  • Registratie: Maart 2002
  • Laatst online: 25-05 18:29
maar dan moet je het per user doen, terwijl je alle users in een keer wil zien toch ??

[ Voor 10% gewijzigd door Bud_s op 25-11-2003 23:33 ]


  • Maniakje
  • Registratie: Februari 2001
  • Laatst online: 20-01 20:20
Bud_s schreef op 25 november 2003 @ 23:32:
maar dan moet je het per user doen, terwijl je alle users in een keer wil zien toch ??
Nee, ik wil het per user hebben. :) Het gaat om een pagina op de website waar een ingelogde user de mogelijkheid heeft om games aan zijn profiel toe te voegen. Dat moeten natuurlijk alleen maar de games zijn die hij nog niet heeft, anders worden ze dubbel op zijn lijst gezet.

Ik heb de website inmiddels geupdate met de nieuwe query, werkt als een trein.

The sentence below is true.
The sentence above is false.

Pagina: 1