2012-01-26 16 views
1

私はテーブルを持っています。このテーブルにはユーザIDとその起点と目的地のIDが格納されています。 テーブルb私は場所のIDと場所の具体的な名前を持っています。私がしようとしているのは、テーブルを結合することですが、の名前の列のテーブルbは、2つのアドレスを取得しようとしているので、2回使用する必要があります。私はMySQLを読もうとしていますが、間違っています。どんな助けもありがとう。MySQLのテーブルからカラムを2回選択する

 table a 
------------------------ 
| uid | to | from | 
------------------------ 
| 1 | 1 | 2 | 
------------------------ 

    table b 
--------------- 
| lid | name | 
--------------- 
| 1 | one | 
--------------- 
| 2 | two | 
--------------- 

     /what I'm trying to achieve/ 
------------------------------------------ 
|a.uid | a.to | b.name | a.from | b.name | 
------------------------------------------ 
| 1 | 1 | one | 2 | two | 
------------------------------------------ 

答えて

1

あなたは別のテーブル名を使用して二回表Bに参加する必要があり、そして毎回だろう(B1、B2)as

select * 
from a join b as b1 on a.to = b1.lid 
     join b as b2 on a.from = b2.lid 

を使用するので、結果は

-------------------------------------------- 
|a.uid | a.to | b1.name | a.from | b2.name | 
-------------------------------------------- 
| 1 | 1 | one | 2 | two  | 
-------------------------------------------- 

だろうけどあなたがおそらく望むのは名前の衝突を防ぐことです - もしあなたPHPからそれを呼び出す - ので、その後も、列の名前を変更します。

select a.*, b1.name as toName, b2.name as fromName 
... (rest of the query as above) 
+0

ありがとうございます。列の名前を変更してください。 –

0

それはただ単に二回表Bに参加二回に限定されています場合。

しかし、a.fromとa.toの間に任意の数の数字を入れることができるようです。この場合、2つ以上のクエリでこれを行うことをお勧めします。

1つ以上の行から、a.fromとa.toの間にあるbのすべての行を取得する1つ。

関連する問題