Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mySQL:从多个表中选择数据_Mysql_Codeigniter_Activerecord - Fatal编程技术网

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

我需要帮助构建一个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            "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:是的,我知道,我只是不使用这个功能,所以当我看到它时,它有时会让我困惑(通常是按顺序排列的)。