mySQL:从多个表中选择数据
我需要帮助构建一个mysql查询以从多个表中进行选择。 我有三个与图像相关的数据库表:mySQL:从多个表中选择数据,mysql,codeigniter,activerecord,Mysql,Codeigniter,Activerecord,我需要帮助构建一个mysql查询以从多个表中进行选择。 我有三个与图像相关的数据库表:images,tags,tag\u asc。我想通过提供image\u id来获取图像数据及其标记名 例如,以下是我的表结构: 图像: image_id image_name path date 1 test.jpg dir 1311054433 tag_id tag_name 1 "first" 2
images
,tags
,tag\u asc
。我想通过提供image\u id
来获取图像数据及其标记名
例如,以下是我的表结构:
图像:
image_id image_name path date
1 test.jpg dir 1311054433
tag_id tag_name
1 "first"
2 "second"
3 "third"
标签:
tag_id image_id
1 1
2 1
tag\u asc:
image_id image_name path date
1 test.jpg dir 1311054433
tag_id tag_name
1 "first"
2 "second"
3 "third"
我想从images表中获取image\u id=1
图像的数据,并从tag\u asc
表中获取与image\u id=1
相关的所有标记名
我正在使用CodeIgniter活动记录,但我只需要加入表的想法
谢谢你的帮助
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;
谢谢,但正如我所说,1个图像可以在表标记中有多行标记(请参阅我的示例数据)。此查询仅返回标记表中的一行。例如,see image_id 1有两个标记,但它只返回1。你能告诉我怎么修吗?谢谢。@Bohemian,谢谢你的回复。实际上,您的第一个解决方案正是我想要的,但是在while循环中获取结果时出现了一些问题。非常抱歉,“分组1”怎么了?这种语法可以追溯到SQL92标准。@Bohemian:没有问题。我期待着
按图像进行分组\u id
。我没有注意到where
仅对一幅图像的限制。@Bohemian:是的,我知道,我只是不使用这个功能,所以当我看到它时,它有时会让我困惑(通常是按顺序排列的)。