2011-09-13 4 views
0

これは簡単で、おそらく...MySQLのカラム値にID参照を代入する簡単な方法はありますか?

いいえ、私はusersmessagesの2つのテーブルがあります。 はそうのような書式付き:あなたが推測していなかった場合は

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さんは、参加すると結果にユーザー名をプルできるようになります – ajreal

答えて

2

JOINなどがあります。あなたが列TOまたはFROMNULL秒を持っている場合は、LEFT OUTER JOINに良いと考え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

これらの役に立たないバックティックは私に頭痛を与えます。 – Johan

+0

ええと...私はこれがうまくいくようには見えません。:/ – Yoshiyahu

+0

それは残念ですが、私はちょうどバックティックに慣れていました。私は彼らがここで役に立たないことに同意する:) – Johan

関連する問題