2011-09-13 4 views
0

이것은 간단하게 들리 겠지만 아마도 ...MySQL의 컬럼 값에 대한 ID 참조를 대체하는 간단한 방법이 있습니까?

좋아요, 그래서 두 개의 테이블 usersmessages이 있습니다. 은과 같이 포맷 : 당신이 생각하지 않은 경우

users 
ID | username 
1 | im_a_user 
2 | another_user 

messages 
ID | FROM | TO | CONTENT 
1 | 1 | 2 | Blah blah blah... 
2 | 2 | 1 | Hello, World! 
3 | 2 | 1 | Another message. 

는 열 FROMTO 테이블 users에서 ID에 대한 참조입니다.

어쨌든,이 같은 반환하는 쿼리하고 싶습니다 :

ID | FROM   | TO   | CONTENT 
1 | im_a_user | another_user | Blah blah blah... 
2 | another_user | im_a_user | Hello, World! 
3 | another_user | im_a_user | Another message. 

내가 전에 JOINS로 이런 짓을했습니다,하지만 난 약간 녹슨 해요, 나는 궁금했다가 더 간단한 방법입니다. 그렇지 않은 경우 JOIN을 사용하는 쿼리가 문제가되지 않습니다.

+0

정규화가 올바르게 수행되므로 독창적 인 아이디어가 더 좋습니다. 지금 당신이하려는 것은 그것을 표준화 해제하는 것입니다. 음 ... 재미있게 놀아 라! – ajreal

+0

나는 내 의도를 결코 말하지 않았다. 나는 그 결과를 보도록하고있다. – Yoshiyahu

+0

yoshi san, 결과에 사용자 이름을 가져올 수 있습니다. – ajreal

답변

2

JOIN 등이 있습니다. 당신이 열 TO 또는 FROMNULL의이 경우 LEFT OUTER JOIN에 apropriate INNER JOIN을 변경

SELECT 
    m.id, 
    sender.username AS sender, 
    recipent.username AS recipient, 
    m.content 
FROM messages m 
    INNER JOIN users sender 
    ON sender.id = `m.from` 
    INNER JOIN users recipent 
    ON recipient.id = m.to 

:이 같은 쿼리가 필요합니다.

보조 단어로 FROM과 같은 SQL 예약어를 열 이름으로 사용하지 않는 것이 좋습니다.

+0

아, 조언을 주셔서 감사합니다. 실제로 'FROM'을 사용하지 않았습니다. 단지 간단한 예입니다. – Yoshiyahu

0

몇 가지 조인이 최선의 방법이라고 생각합니다.

내 머리 꼭대기에서 .. 이런 식으로 뭔가?

SELECT messages.ID, from_user.username, to_user.username, messages.CONTENT FROM messages 
LEFT JOIN users as from_user ON (messages.FROM = users.ID) 
LEFT JOIN users as to_user ON (messages.TO = users.ID) 
+0

그 쓸모없는 backticks는 저에게 두통을줍니다. – Johan

+0

흠 ... 나는 이걸 작동시키지 못하는 것 같아./ – Yoshiyahu

+0

미안해, 미끼 야. 나는 그들이 여기 쓸모 없다는데 동의한다. – Johan

관련 문제