0


0

MySQLの列値をID参照に置き換える簡単な方法はありますか?

これは簡単に聞こえますが、おそらく…​

わかりましたので、 users`と messages`の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.

推測しなかった場合、列「FROM」と「TO」はテーブル「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」を使用したクエリで問題ありません。

2 Answer


2


`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

「TO」または「FROM」列に「NULL」がある場合、適切な「INNER JOIN」を「LEFT OUTER JOIN」に変更します。

補足として、列名として「FROM」などのSQL予約語を使用しないことをお勧めします。


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)