2011-01-19 10 views
0

私は2つのテーブルを持っています - 1つはの記事と、もう1つは記事と関連する写真です。各記事は、私がデータをフェッチするために使用しなし、それに関連する1つまたは複数の写真(外部キーなどのarticle_id)Mysql:結合クエリの作成と読み込み方法

クエリで持つことができます。

SELECT articles.article_id, articles.article_text article_photos.photo_filename 
FROM articles, article_photos 
WHERE article_photos.article_id = articles.article_id 

そして、それは私には+ 1 photo_filenameすべてのデータを返します。

質問2つ以上の写真が記事に関連している場合、どうすれば読むことができますか?

ありがとうございます!

答えて

1

それはOPのクエリは3を返すことに注意してくださいがある(ちょうどこのように、記事1のレコードに入社し、このような

select articles.article_id, articles.article_text, article_photos.photo_filename 
from 
    articles 
left join article_photos 
on article_photos.article_id=articles.article_id 

>>> results 
1,some_text,photo1.jpg 
1,some_text,photo2.jpg 
1,some_text,photo3.jpg 
2,some_text2,NULL  --> no photo related 
+1

としてarticle_photos

からarticlesから同じ行を複製するが、異なる行う技術的に彼が求めたもの)。ここで追加された左の結合は、元のクエリが欠けていたもの、つまり写真がない記事(OPが見落としている可能性がある)を示しています。 – keithjgrant

+0

@keithjgrant:これは私のバージョンのクエリが、写真が関連していない記事をスキップするだけであることを意味しますか? – CodeVirtuoso

+1

@keithjgrant - Yupは自然に内部結合(exclude null)です。LEFT JOINのONまたはUSING部分に、右側のテーブルに一致する行がない場合、NULLに設定されたすべての列がNULLに設定されている行が、右のテーブル。このファクトを使用して、テーブル内の対応するテーブルがないテーブルの行を見つけることができます。 ' – ajreal

関連する問題