我有一個問題,我有點難以解釋。
我有兩個資料庫表:
| ID | 水果 |
|---|---|
| 1 | 蘋果 |
| 2 | 橙子 |
| FRUIT_ID | 顏色 |
|---|---|
| 1 | 紅色的 |
| 1 | 綠色的 |
| 2 | 橙子 |
這背后的想法:水果可以有多種顏色。要從所有水果中獲得所有顏色,我必須加入它們:
SELECT a.*, b.color FROM Fruit a, FruitColor b WHERE a.id = b.fruit_id
| ID | 水果 | 顏色 |
|---|---|---|
| 1 | 蘋果 | 紅色的 |
| 1 | 蘋果 | 綠色的 |
| 2 | 橙子 | 橙子 |
JSON 看起來像這樣:
[
{
"ID": "1",
"FRUIT": "Apple",
"COLOR": "Red"
},
{
"ID": "1",
"FRUIT": "Apple",
"COLOR": "GREEN"
},
{
"ID": "2",
"FRUIT": "Orange",
"COLOR": "Orange"
}
]
問題來了, 我實際上不想為每種額外的顏色回傳一個物件,我需要將它們放在這樣的陣列中:
[
{
"ID": "1",
"FRUIT": "Apple",
"COLOR": [
"Red",
"Green"
]
},
{
"ID": "2",
"FRUIT": "Orange",
"COLOR": "Orange"
}
]
我怎樣才能做到這一點?我是否必須更改資料庫結構或查詢都沒關系,對此的任何解決方案都會有所幫助。
uj5u.com熱心網友回復:
您可以使用JSON_ARRAYAGG兩次函式以首先封裝顏色,然后使用第二次應用的物件,例如
SELECT JSON_ARRAYAGG(js) AS Result
FROM (SELECT JSON_OBJECT('id',
f.id,
'fruit',
f.fruit,
'state',
JSON_ARRAYAGG(fc.color)) AS js
FROM Fruit AS f
JOIN FruitColor AS fc
ON f.id = fc.fruit_id
GROUP BY f.id, f.fruit) j
Demo
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/482489.html
上一篇:如何根據日期計算訪問次數?
