mySQL:从多个表中选择数据

标签 mysql codeigniter activerecord

我需要帮助构建一个 mysql 查询以从多个表中进行选择。 我有三个与图像相关的数据库表:imagestagstag_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 的图像数据,并从 tag_asc 中获取与 image_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;

关于mySQL:从多个表中选择数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6745325/

相关文章:

php - 开发 Codeigniter 游戏

php - 如何跟踪用户在网站上的时间

ruby-on-rails - Rails 日期晚于

sql - 选择正确的数据库 : MySQL vs. 其他一切

java - 如何从 JdbcTemplate 在 MySQL 中创建用户?

mysql - node-mysql 池和 socket.io

mysql - 如果关联表的列之一不满足条件,如何忽略表中的行?

mysql - MySQL中的分层查询

php - 带数组的 Codeigniter where 子句

mysql - 我可以在 WHERE 语句中使用自定义方法吗?