簡體   English   中英

檢索 SQL 結果,按類別分組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM