我有一个mysql问题,我想不出解决办法。
我有两张table
表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
2条答案
按热度按时间s4n0splo1#
您的第一项工作应该是修复您的模式。您应该有一个单独的表来存储图书/类别关系,每个元组位于单独的表行中。在数据库表中存储带分隔符的列表是一种糟糕的设计,应该始终避免:有关详细信息,请参阅这个著名的so问题。
不过,对于您当前的设置,我建议使用
find_in_set()
:nzkunb0c2#
为了回应其他人,我要做的第一件事是对您的表结构做一个小的更改,并将书籍从类别中分离出来,如下所示:
最后,要获得所需的结果,请执行以下查询: