2010-07-13 17 views
1

OiBesoin d'aide avec un simple rejoindre

Droit au problème.

SELECT *,t.id AS threadid FROM threads t 
LEFT JOIN players p on p.id = t.last_poster 
WHERE t.boardid = $boardid 

J'ai deux champs dans les discussions appelées posterid et lastposterid. Quels sont les identifiants du démarreur de fil/dernière affiche. Ce que je veux faire, c'est obtenir leur nom des joueurs.

Mais comment?

Répondre

1

Vous pouvez vous joindre à la même table deux fois et donner la table un alias différent. Ceci suppose qu'il y aura toujours un premier et dernier poster, si c'est le cas alors vous voulez un INNER JOIN plutôt qu'un LEFT JOIN, vous devrez changer l'instruction select pour obtenir les champs appropriés.

SELECT t.id AS threadid, playerFirst.name AS FirstPoster, playerLast.name as LastPoster 
FROM threads t 
INNER JOIN 
    players playerFirst ON playerFirst.id = t.posterid 
INNER JOIN 
    players playerLast ON playerLast.id = t.lastposterid 
3

Vous avez juste besoin de vous joindre à la table de vos joueurs deux fois, comme ceci.

SELECT 
    threads.*, 
    starterPlayer.*, 
    lastPosterPlayer.* 
FROM 
    threads 
LEFT OUTER JOIN 
    players starterPlayer 
ON 
    starterPlayer.id = threads.posterid 
LEFT OUTER JOIN 
    players lastPosterPlayer 
ON 
    lastPosterPlayer.id = threads.lastposterid 
0

Que diriez-vous ...

SELECT *, 
    (SELECT name 
     FROM players 
     WHERE players.id = threads.posterid) AS poster, 
    (SELECT name 
     FROM players 
     WHERE players.id = threads.lastposterid) AS last_poster 
    FROM threads;