php - 检索按类别分组的 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 条
解决方案
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
推荐阅读
- php - 搜索任何表字段中是否存在变量并获取表字段名称
- php - 使用数据库值的 Smarty 计算
- r - 使用 grepl() 从 R 中的数据框中删除值
- java - 如何处理 RequestMapping 中的@Valid 违规行为?
- python - 用于股票市场预测、回归的卷积神经网络
- excel - 从 Excel 电子表格中删除一些图片
- c# - Parent类方法如何订阅子类Event?
- love2d - windows上是否有love2d的分辨率处理库
- html - 从类选择传递数据以获取路线
- javascript - Google Maps API KMZ 文件在点击事件中显示错误数据