2013-06-17 4 views
4

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

У меня есть простая таблица пользователей из двух столбцов (ID, USERNAME).
У меня есть таблица комментариев для изображений (COMMENT, COMMENTFROM, COMMENTTO)

COMMENTFROM - это идентификатор пользователя, сделавшего комментарий. COMMENTTO - это идентификатор владельца изображения, к которому добавлен комментарий. Оба пользователя хранятся в таблице USERS.

Я хочу, чтобы вытащить и отображения строки как этот

"really nice photo" - to USERXYZ - from USER123** 

Это озадачило меня, потому что, если я присоединюсь к таблице USERS к столу комментарии на:

WHERE comments.userfrom = users.id 

Это только заставляет меня один (или другой) из двух имен пользователей, которые мне нужны для каждой строки. Есть ли способ получить оба?

Я даже не уверен, как я буду искать этот ответ на SOF, извини, если на это был дан ответ. Если кто-то может мне точку в правильном направлении, будет понятно :)

+1

Пожалуйста, не бейте себя слишком много. Кроме того, более конкретное название вопроса поможет дать приблизительное представление о том, что происходит. – icedwater

+0

Да, не беспокойтесь слишком много, если вы не можете вспомнить название концепции/шаблона дизайна :) –

ответ

9

Вы должны JOIN к users таблице дважды, и дать им различные идентификаторы (так называемые псевдонимы) на каждом JOIN в вашем SQL.

SELECT 
    comment, 
    userFrom.username AS commentFrom, 
    userTo.username AS commentTo 
FROM comments 
JOIN users AS userFrom ON userFrom.ID = comment.commentFrom 
JOIN users AS userTo ON userTo.ID = comment.commentTo 
+1

А как я живу, дышу и учась :) Я не знал, что вы можете это сделать - спасибо за вашу помощь Фабиан, который является спасателем :) – BigTed

+0

@BigTed взорвал мой разум в первый раз, когда я понял, что вы можете это сделать! –

+0

, а не только потому, что он показывает, как присоединиться к таблице дважды, но также показывает, как переименовать общие столбцы, чтобы они могли быть доступны отдельно после выполнения SQL. Огромное спасибо. –

-1

Пожалуйста, попробуйте следующие один

SELECT CONCAT(c.comment," - to ", 
         (SELECT USERNAME FROM user WHERE user.ID = c.COMMENTTO LIMIT 1), 
         " - from ", 
         (SELECT USERNAME FROM user WHERE user.ID = c.COMMENTFROM LIMIT 1)) FROM comments c 
Смежные вопросы