2012-01-06 4 views
2

Im зацикливается на списке сообщений на форуме, потянув данные из 2 таблиц, posts и members.mySql join - несколько записей из одной таблицы

Я использую LEFT JOIN как

SELECT m.name, p.title FROM posts LEFT JOIN members m ON p.poster=m.id

Это все работает отлично. Но мне также нужно вытащить другую запись из таблицы участников, а именно p.lastposter. Как мне это сделать? Я не могу добавить еще один JOIN, я могу, потому что я уже потянул m.name и не запутал бы его?

ответ

0

Если вы хотите 2 разные rows вы можете использовать UNION:

SELECT m.name, p.title FROM posts LEFT JOIN members m ON p.poster=m.id 

UNION 

SELECT m.name, p.title FROM posts LEFT JOIN members m ON p.lastposter=m.id 

Если вы хотите получить больше информации о том же row из lastposter сделать это:

SELECT m.name, p.title, lp.name AS lastposter 
FROM posts AS p 
LEFT JOIN members AS m ON p.poster=m.id 
LEFT JOIN members AS lp ON p.lastposter = lp.id 
+0

спасибо, я сделал 2-ой метод, но получаю сообщение об ошибке, когда я добавляю LIMIT на конце. Я хочу ограничить записи, найденные с 'posts' – user1022585

+0

Вам, вероятно, понадобится UNION ALL здесь, нет? –

+0

@BillyIneal это зависит :) –

0

я могу 't добавить еще один JOIN, я могу, потому что я уже вытаскиваю m.name и не запутал бы его?

No.

SELECT m.name, p.title, lastpostMembers.name AS lastpostername FROM posts AS p 
LEFT JOIN members m ON p.poster=m.id 
LEFT JOIN members lastpostMembers ON p.lastposter=lastpostMembers.id 

Я действительно не понимаю, почему вы остаетесь здесь, хотя присоединение; кажется, что вы действительно хотите внутреннего соединения.

2

Вы можете добавить еще присоединиться к другим псевдонимом:

SELECT m.name, p.title, lp.name AS lastposter 
FROM posts AS p 
LEFT JOIN members AS m ON p.poster=m.id 
LEFT JOIN members AS lp ON p.lastposter = lp.id 
Смежные вопросы