2012-02-06 16 views
0

私は左結合を使用してクエリを持っています。私の問題は右テーブルが空の場合です。私はON節に使用している値を取得できません。php mysqlは結果の問題に参加しません

SELECT members.*, 
      photos.* 
    FROM members LEFT JOIN photos on members.member_id = photos.member_id 

今、写真テーブルから結果を返すと、そのok。しかし、写真テーブルからの結果がない場合、メンバテーブルから返されますが、member_idは返されません。メンバーテーブルから他のすべてを返しますが、member_idは返しません。

答えて

4

ここでの問題は、同じ名前の2つの列があることです。

は、衝突を避けるために、1の名前を変更してみてください。

SELECT *, members.member_id AS real_member_id

+0

「* ...あなたが同じ名前を持つ2つの列を持っている」*とどこかMySQLとあなたのPHPコードの間で、2つのカラムは新しい名前を取得することで区別されます(おそらく両方とも 'member_id'とは異なります:) –

+0

その仕事のおかげです。私は前に結合を使用しなかったので、同じ列名の2つのテーブルを照合しようとしました。 – Malixxl

2

members.member_idに別名を付けます。

1

あなたはit returns all others from members table but not member_idとはどういう意味ですか? (null)を返しますか?基本的には、それは左から結合するので、メンバーテーブルのすべてのレコードを返します(メンバーテーブル)。しかし、member_idのレコードが存在しない場合は、nullを返します。同じ名前の2つのフィールドがあるので、その列にALIASを指定する必要があります。

members.member_id AS MemberID 
+0

なぜALIASが必要なのか説明するためにupvote。ありがとう。 – Malixxl

0

それはあなたがSELECT一覧にする列の書き込みをexpicitedlyすると良いでしょう:

SELECT members.member_id 
     members.name, 
     photos.photo_id, 
     photos.filename, 
     ... 

その後、あなたは何の2列が同じ名前を持っていないことを確認することができます。また、テーブルの構造の1つが変更されたときにクエリが壊れてしまい、その理由を簡単に見つけることができるため、より効果的です。今は予想外のやり方で壊れてしまった。唯一の共通の列がmember_idであり、あなたが本当にすべての列が必要な場合は


、これはあまりにも動作します:

SELECT * 
FROM members NATURAL LEFT JOIN photos 
関連する問題