2011-09-09 4 views
0

私は同じテーブルに参加しているクエリを作成しました - users-twice、2回、 、JOINs。PHP MySQLがテーブルの質問を結合して読み込みを行う

SELECT * from tbl1 
    JOIN tbl2 ON tbl2.USER_ID = tbl1.ID 
    JOIN tbl2 as alias ON tbl1.ID = tbl2.TEACHER_ID 
WHERE tbl1.ID = 45 

このテーブルへの最初の呼び出しは定期的で、2回目はASを使用する別名を使用します。 私はphpMyAdminの中で結果を取得すると、私は結果はエイリアスと呼ばれていない参照が、いつもの名前で、それはこのようなものだ:

USERNAME =>テッド、ID_NUMBER => 33322552、...、USERNAME =>ジョシュ....私はこのクエリで連想配列

+0

テーブルスキーマの詳細をご提供ください。どのようにmysqlに接続するのか、それを担当するPHPコード – ajreal

+0

SELECT * from tbl1 JOIN tbl2 ON tbl2.USER_ID = tbl1.ID JOIN tbl2 ON tbl1.ID = tbl2.TEACHER_ID WHERE tbl1.ID = 45 – Ted

+0

あなたの質問をSQL – ajreal

答えて

1

は、あなたが二回、あなたが本当のテーブルと呼ばれるTBL2に参照のうえされ、別名を使用していないことを読み取ることができますどのように

。これは動作しません。それ書き換え

SELECT * from tbl1 
JOIN tbl2 ON tbl2.USER_ID = tbl1.ID 
JOIN tbl2 as alias ON tbl1.ID = tbl2.TEACHER_ID 
//        ^^^^ there's no alias here, it's still tbl2 
WHERE tbl1.ID = 45 

SELECT * from tbl1 
JOIN tbl2 AS t2A ON t2A.USER_ID = tbl1.ID 
JOIN tbl2 AS t2B ON tbl1.ID = T2B.TEACHER_ID 
WHERE tbl1.ID = 45 

asキーワードはオプションです。
あなたが参照しているtbl2のバージョンを誤解することはありません。

あなたとしても、クエリ2を書き換えることができ

注2つのクエリの違い:

SELECT * from tbl1 
JOIN tbl2 ON (tbl2.USER_ID = tbl1.ID) AND (tbl2.teacher_ID = tbl1.id) 
WHERE tbl1.ID = 45 

:あなたのように、クエリ1を書き直すでしょうその場合、

SELECT * from tbl1 
JOIN tbl2 ON (tbl2.USER_ID = tbl1.ID) OR (tbl2.teacher_ID = tbl1.id) 
WHERE tbl1.ID = 45 

違いを見ます?

関連する問題