mysql - 我不确定我的 MySQL GROUP_CONCAT 查询出了什么问题……你能帮我解决吗?
问题描述
我有一个 MySQL 问题,我无法找出解决方案。
我有 2 张桌子
表 1-[书]表
book id | categories | title |
1 | 1,3,5 | Book 1 |
2 | 2,4 | Book 2 |
3 | 1,4 | Book 3 |
表 2-【类别】表
category id | category name
1 | Technology
2 | Accounting
3 | Science
4 | Math
5 | Chemistry
我需要这样的结果
结果
book id | categories | title | category name
1 | 1,3,5 | Book 1 | Technology,Science,Chemistry
2 | 2,4 | Book 2 | Accounting,Math
3 | 1,4 | Book 3 | Technology,Math
我尝试了以下查询,但我不确定它有什么问题。
SELECT DISTINCT t1.*,(SELECT GROUP_CONCAT(t2.categoryName) FROM `tbl_category` t2 WHERE t2.id IN (t1.categories)) catColumn FROM tbl_books t1 ORDER BY t1.id DESC
如果我执行以下查询,它将返回我需要的正确值:
SELECT GROUP_CONCAT(categoryName) FROM `tbl_category` t2 WHERE t2.id IN (1,3,5)
结果:
Technology,Science,Chemistry
解决方案
您应该首先努力修复您的架构。您应该有一个单独的表来存储书籍/类别关系,每个元组都位于单独的表行中。在数据库表中存储分隔列表是不好的设计,应始终避免:有关更多详细信息,请参阅这个著名的 SO 问题。
不过,对于您当前的设置,我建议使用以下相关子查询find_in_set()
:
select
b.*,
(
select group_concat(c.category_name)
from category c
where find_in_set(c.id, b.categories)
) category_names
from book b
推荐阅读
- c# - C# XML 中的十进制实体替换为十六进制实体
- python - 如何在熊猫中用NaN替换列中的单词
- json - 在使用 XSLT 将 XML 转换为 JSON 时处理嵌套元素
- typescript - 从 Tree 类继承 Typescript(访问父元素的属性)
- javascript - 获取 JSON 子数据
- asdf-vm - 未找到 asdf 命令
- python - 如何在python爬虫中保存存储(常用字符串)
- javascript - 模拟文件拖入浏览器的拖动事件
- testing - 在 testcafe 上选择 chrome 作为浏览器并在测试更改中间模拟设备以更改为设备视图
- laravel - 如何在没有昂贵电话的情况下在频道中获得最新回复?