Dubbele left join
Hoe kan ik in php een dubbele left join maken binnen 2 tabellen? Ik heb geprobeerd om ze achter elkaar te zetten:
SELECT friends.playerid,friends.friendid,players.id,players.username FROM friends LEFT JOIN players ON friends.playerid = players.id LEFT JOIN players ON friends.friendid = players.id
Maar dat werkt helaas niet :(
Heeft iemand een idee hoe ik dat kan doen?
Mvg,
Tim
SELECT friends.playerid,friends.friendid,players.id,players.username FROM friends LEFT JOIN players ON friends.playerid = players.id LEFT JOIN players ON friends.friendid = players.id
Maar dat werkt helaas niet :(
Heeft iemand een idee hoe ik dat kan doen?
Mvg,
Tim
Als je twee keer dezelfde tabel wilt joinen, zul je een alias moeten gebruiken om aan te geven welke tabel je bedoelt:
In de SELECT gebruik je nu ook f, p1 en p2 om de tabellen aan te geven waar je informatie uit wilt selecteren...
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
SELECT
...
FROM
friends f
LEFT JOIN
players AS p1
ON p1.id = f.playerid
LEFT JOIN
players AS p2
ON p2.id = f.playerid
...
FROM
friends f
LEFT JOIN
players AS p1
ON p1.id = f.playerid
LEFT JOIN
players AS p2
ON p2.id = f.playerid
In de SELECT gebruik je nu ook f, p1 en p2 om de tabellen aan te geven waar je informatie uit wilt selecteren...
Vergeet niet dat je in het select gedeelte in ieder geval een een andere naam moet geven. Dus bijvoorbeeld:
ok ik heb het gedeeltelijk voor elkaar. ik heb een query met 2 LEFT JOIN's gemaakt op een tabel met 2 rijen die gebruikersid's die in die rijen staat checkt met een gebruikerstabel:
als ik bij de eerste LEFT JOIN "AS ...." doe dan werkt de query niet meer en krijg ik een melding: Unknown column 'friends.playerid' in 'field list'
het enige probleem nu nog is: Met deze query krijg ik 2 rijen per LEFT JOIN ipv 2 rijen voor beide JOINS. Hoe zorg ik ervoor dat de gegevens van beide joins op 1 rij komen te staan?
PS: te lang niet meer op dit forum geweest en heb geen idee meer hoe de code tag werkt. Mijn excuses.
PPS: ah thanks ik deed <> ipv []
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
SELECT players.id AS player_id,players.username AS playername, friends.playerid AS friendsplayer_id, friends.friendid AS friend_id
FROM players
LEFT
JOIN friends
ON friends.playerid = players.id
LEFT
JOIN friends as friendtbl
ON friendtbl.friendid = players.id
FROM players
LEFT
JOIN friends
ON friends.playerid = players.id
LEFT
JOIN friends as friendtbl
ON friendtbl.friendid = players.id
als ik bij de eerste LEFT JOIN "AS ...." doe dan werkt de query niet meer en krijg ik een melding: Unknown column 'friends.playerid' in 'field list'
het enige probleem nu nog is: Met deze query krijg ik 2 rijen per LEFT JOIN ipv 2 rijen voor beide JOINS. Hoe zorg ik ervoor dat de gegevens van beide joins op 1 rij komen te staan?
PS: te lang niet meer op dit forum geweest en heb geen idee meer hoe de code tag werkt. Mijn excuses.
PPS: ah thanks ik deed <> ipv []
Gewijzigd op 31/07/2011 17:10:54 door thuron thuron
Zet je code tussen [code] en [/code]
Door ze in de select op te nemen. Dus zo:
Overigens geef ik mijn kolommen altijd unieke namen, dat is makkelijker bij het selecteren. Dus id van de friends tabel zou dan bijvoorbeeld fr_id worden en het id van de players pl_id.
Dan kun je dit doen:
Zo hoef je minder uit te schrijven en voorkomt vergissingen en "ambiguous" meldingen.
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
SELECT players.id AS player_id, players.username AS playername,
friends.playerid AS friendsplayer_id, friends.friendid AS friend_id,
friendstbl.playerid AS friendtblsplayer_id, friendstbl.friendid AS friendtbl_id
FROM players
LEFT
JOIN friends
ON friends.playerid = players.id
LEFT
JOIN friends as friendtbl
ON friendtbl.friendid = players.id
friends.playerid AS friendsplayer_id, friends.friendid AS friend_id,
friendstbl.playerid AS friendtblsplayer_id, friendstbl.friendid AS friendtbl_id
FROM players
LEFT
JOIN friends
ON friends.playerid = players.id
LEFT
JOIN friends as friendtbl
ON friendtbl.friendid = players.id
Overigens geef ik mijn kolommen altijd unieke namen, dat is makkelijker bij het selecteren. Dus id van de friends tabel zou dan bijvoorbeeld fr_id worden en het id van de players pl_id.
Dan kun je dit doen:
Code (php)
1
2
3
2
3
SELECT players.*, friends.*,
friendstbl.playerid AS friendtblsplayer_id, friendstbl.friendid AS friendtbl_id
...
friendstbl.playerid AS friendtblsplayer_id, friendstbl.friendid AS friendtbl_id
...
Zo hoef je minder uit te schrijven en voorkomt vergissingen en "ambiguous" meldingen.
Gewijzigd op 31/07/2011 17:40:08 door Eric Wagener
hmm als k dat probeer dan geeft ie dezelfde error die ik eerder beschreef: Unknown column 'friendstbl.playerid' in 'field list'
deze slaat op de friendstbl.playerid in de select, dus daar herkent ie um niet op een of andere manier...
EDIT: ik heb het voor elkaar, zaten wat spelfouten in de tabelnamen. nu laat ie het volgende zien:
player_id playername
235 thuron
friendsplayer_id friendtbl_id
235 NULL
ik heb het bijna voor elkaar, is het mogelijk om in de query de friendsplayer_id met de players.id te vergelijken en dan de players.username uit dezelfde rij te pakken?
deze slaat op de friendstbl.playerid in de select, dus daar herkent ie um niet op een of andere manier...
EDIT: ik heb het voor elkaar, zaten wat spelfouten in de tabelnamen. nu laat ie het volgende zien:
player_id playername
235 thuron
friendsplayer_id friendtbl_id
235 NULL
ik heb het bijna voor elkaar, is het mogelijk om in de query de friendsplayer_id met de players.id te vergelijken en dan de players.username uit dezelfde rij te pakken?
Gewijzigd op 31/07/2011 21:26:59 door thuron thuron
ik zit nu met een nieuw probleem. Ik heb 1 query voor het ophalen van de vrienden van de speler, dan heb ik een while die voor elke vriend aan de hand van de id de naam ophaalt, en daarna heb ik ook nog een foreach die voor elke vriend moet gaan kijken of hij/zij online is. Is er een manier om dit te doen zonder dat mijn database zo belast word met 2 queries per vriend?...
bump
Iemand?
Waarom loop je steeds te bumpen, na 1 keer bumpen en geen antwoord dan moet je je toch wel bedenken dat je op de laatst gestelde vraag al antwoord is gegeven.
Probeer zelf eens in de gegeven query ook de status "online/offline" op te halen.
Probeer zelf eens in de gegeven query ook de status "online/offline" op te halen.
dat probeer ik ook maar aangezien ik alle namen van de vrienden in een array zet is het moeilijk om daar ook de status bij te zetten...
ps: Probeer eens op een vriendelijke/normale manier te posten, ik heb je berichten bekeken en je zit alleen maar mensen af te zeiken.
ps: Probeer eens op een vriendelijke/normale manier te posten, ik heb je berichten bekeken en je zit alleen maar mensen af te zeiken.
Thuron, ik denk dat het beter is om even een nieuw topic aan te maken met alle relevante voorbeelden en code erbij. Tenslotte is het ook een nieuw probleem.
ik denk dat ik al een oplossing heb: 2 arrays met de info in de verschillende arrays op dezelfde positie. geen idee of het de makkelijkste manier is maar voor nu kan het. iig bedankt voor de hulp




