我需要帮助构建一个mysql查询以从多个表中进行选择。
我有三个与图像相关的数据库表:images
,tags
,tag_asc
。我想通过提供image_id
来获取图像数据及其标记名称。
例如,以下是我的表结构:
图片:
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
图片的数据,并从image_id=1
表格中获取与tag_asc
相关联的所有标记名称。
我正在使用CodeIgniter Active记录,但我只是想加入表格。
感谢您的帮助。
答案 0 :(得分: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;
使用LEFT JOIN
表示即使其他表中没有连接行也会返回行(但是在缺失行的列中会得到null
个值),这通常是合乎需要的。
如果您想要一行(未说明,但在评论中),请使用此行:
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;