Нужна помощь с простым присоединением - PullRequest
1 голос
/ 13 июля 2010

Oi

Право на проблему.

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

У меня есть два поля в потоках с именами posterid и lastposterid. Которые являются идентификаторами потока Автор / Последний постер. То, что я хочу сделать, это получить их имена из таблицы игроков.

Но как?

Ответы [ 3 ]

3 голосов
/ 13 июля 2010

Вам просто нужно присоединиться к столу игроков дважды, вот так.

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
1 голос
/ 13 июля 2010

Вы можете присоединиться к одной и той же таблице дважды и присвоить ей другой псевдоним.

Это предполагает, что всегда будет первый и последний постер. Если это так, то вам нужно INNER JOIN, а не LEFT JOIN, вам нужно будет изменить оператор выбора, чтобы получить соответствующие поля.

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
0 голосов
/ 13 июля 2010

Как насчет ...

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;
...