[英]Retrieve SQL results, grouped by categories
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 條
貓2
- 第1條
- 第 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
因此,如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...
先感謝您。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.