由于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查询是否可以通过这种方式检索已经按类别分组的文章列表:
Cat1
-第1条
-第2条
cat2
-第1条
-第3条
Cat3
-第2条
-第3条
答案 0 :(得分:0)
最好创建一个新表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
答案 1 :(得分:0)
因此,如scaisEdge和jStaff所建议,我建立了一个中间表,用于存储两个表的ID。
现在我以这种形式获得结果列表,这还不错:
[0]
- Title 1
- Cat 1
[1]
- Title 1
- Cat 2
[2]
- Title 2
- Cat 1
[3]
- Title 2
- Cat 3
[4]
- Title 3
- Cat 2
[5]
- Title 3
- Cat 3
现在是否有可能通过使用GROUP BY将这些结果按类别分组以生成此表单? :
[Cat 1]
- Title 1
- Title 2
[Cat 2]
- Title 1
- Title 3
etc...
谢谢。