首页 > 解决方案 > 检索按类别分组的 SQL 结果

问题描述

sql水平比较低,被屏蔽了,来找你帮忙。

所以我有一个包含我的 2 个表、一个文章表和一个类别表的数据库。在我的文章表中,我有一个字段,它以 JSON 格式包含它所属的类别的 ID。

从示意图上看,类别表如下所示:

|    Name    |  id |
|    Cat1    |  1  |
|    Cat2    |  2  |
|    Cat3    |  3  |

和表格文章:

|     Title     |   id  |       Categories      |
|     Title1    |   1   |         [1,2]         |
|     Title2    |   2   |         [1,3]         |
|     Title3    |   3   |         [2,3]         |

目前,我检索我的文章如下:

SELECT *
FROM articles a
JOIN categories c
ON JSON_CONTAINS(a.categories, CAST(c.id AS CHAR))

然后在php中我按类别对它们进行分组。但我发现这个解决方案不是很干净。

所以我想知道一个 SQL 查询是否可以通过这种方式检索已经按类别分组的文章列表:

第 1类-
第 1 条
- 第 2 条

cat2
- 第 1
条 - 第 3 条

第 3类
- 第 2
条 - 第 3 条

标签: phpmysqlsqlpdo

解决方案


ArticleCategories创建一个列出每个文章类别的新表是更好的数据库设计:

ArticleID, CatID

如果一个 ArticleID 可以有多个 CatID...

现在,您可以将多个类别关联到一篇文章,并使用 SQL 轻松搜索这个新数据库以查找类别和文章之间的关联。

SELECT    c.category, STRING_AGG(a.title, ',')
FROM      articles a
LEFT JOIN articleCategories ac
       ON a.id = ac.articleID
LEFT JOIN categories c
       ON c.id = ac.categoryID
GROUP BY  c.category

推荐阅读