2010-07-13 135 views
1

Oi需要簡單加入幫助

正確的問題。

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

我在線程調用posteridlastposterid兩個字段。哪些是線索起始者/最後一張海報的ID。我想要做的是從玩家桌上獲得他們的名字。

但是如何?

回答

1

你可以加入到同一個表兩次,給表不同的別名。

這假定始終會有第一張和最後一張海報,如果是這種情況,那麼您需要INNER JOIN而不是LEFT JOIN,則需要更改select語句以獲取相關字段。

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

你只需要加入到你的球員表兩次,就像這樣。

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

......怎麼

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;