2011-07-19 13 views
1

複数のテーブルから選択するためにmysqlクエリを構築するのに役立つ必要があります。 画像に関連するデータベーステーブルが3つあります:imagestagstag_ascです。私はimage_idを提供することによって画像データとそのタグ名を取得したいと思います。mySQL:複数のテーブルからデータを選択

たとえば、次は私のテーブル構造である:

画像:

image_id image_name  path  date 
1   test.jpg  dir  1311054433 

タグ:

tag_id  image_id 
1    1 
2    1 

がtag_asc:

tag_id  tag_name 
1   "first" 
2   "second" 
3   "third" 

私は画像テーブルからimage_id = 1と画像のデータとtag_ascテーブルからimage_id=1に関連付けられているすべてのタグ名を取得したいです。

私はCodeIgniterアクティブレコードを使用していますが、私はテーブルを結合するだけのアイデアが必要です。

ありがとうございました。使用LEFT JOIN

答えて

2
select * 
from images i 
left join tags t on t.image_id = i.image_id 
left join tag_asc ta on ta.tag_id = t.tag_id 
where i.image_id = 1; 

行が他のテーブルには参加行がない場合でも返されます(ただし、あなたが不足している行の列でnullの値を取得します)一般的に望まれる、ということを意味します。

使用すると、1つの行をしたい場合は(問題のが、コメントで述べられていない)、これを使用する:

select i.image_id, group_concat(tag_name) as tag_names 
from images i 
left join tags t on t.image_id = i.image_id 
left join tag_asc ta on ta.tag_id = t.tag_id 
where i.image_id = 1 
group by 1; 
+0

おかげで、私は(私を参照してください。1枚の画像は、テーブルタグにタグの複数の行を持つことができます言ったようにサンプルデータ)。このクエリは、タグテーブルから1行だけを返します。たとえば、image_id 1には2つのタグがありますが、それは1だけを返します。それを修正する方法を教えてもらえますか?ありがとう。 – Roman

+0

私はあなたのテストデータでクエリをテストしました - クエリは2行を返しました。 – ksogor

+0

その人を試してください... – Bohemian

関連する問題