我有 3 張桌子
餐廳表:
| restaurant_id | 餐廳名稱 |
|---|---|
| 1 | 漢堡王 |
| 2 | 咖啡館 |
食物表:
| food_id | food_title | 類別ID | restaurant_id |
|---|---|---|---|
| 1 | 芝士漢堡 | 1 | 1 |
| 2 | 牛肉漢堡 | 2 | 1 |
| 3 | 奶酪牛肉漢堡 | 2 | 1 |
| 4 | 冰咖啡 | 3 | 2 |
| 5 | 黑咖啡 | 3 | 2 |
| 5 | 綠茶 | 4 | 2 |
分類表:
| 類別ID | 類別標題 |
|---|---|
| 1 | 普通漢堡 |
| 2 | 牛肉漢堡 |
| 3 | 咖啡 |
| 4 | 茶 |
我正在尋找的輸出:
| restaurant_id | 餐廳名稱 | 類別串列 |
|---|---|---|
| 1 | 漢堡王 | [{category_id: 1, category_title: '普通漢堡'}, {category_id: 2, category_title: '牛肉漢堡'}] |
| 2 | 咖啡館 | [{category_id: 3, category_title: '咖啡'}, {category_id: 4, category_title: '茶'}] |
uj5u.com熱心網友回復:
加入和Restaurants加入并按餐廳分組。
然后使用聚合函式獲取串列:FoodsCategoriesLEFTJSON_ARRAYAGG()
SELECT r.restaurant_id, r.restaurant_name,
JSON_ARRAYAGG(JSON_OBJECT('category_id', c.category_id, 'category_title', c.category_title)) categories_list
FROM Restaurants r
LEFT JOIN (SELECT DISTINCT category_id, restaurant_id FROM Foods) f ON f.restaurant_id = r.restaurant_id
LEFT JOIN Categories c ON c.category_id = f.category_id
GROUP BY r.restaurant_id, r.restaurant_name;
我SELECT DISTINCT ...在表中使用,Foods因為我在您的預期結果中看到您希望每個串列中有不同的類別。
請參閱演示。
uj5u.com熱心網友回復:
嘗試:
select restaurant_id,restaurant_name,concat('[',group_concat(my_col),']') as tot_result
from ( select r.restaurant_id,r.restaurant_name,concat('{category_id: ', c.category_id," category_title: '",c.category_title ,"'}") as my_col
from Restaurants r
inner join Foods f on r.restaurant_id=f.restaurant_id
inner join Categories c on c.category_id=f.category_id
group by r.restaurant_id,r.restaurant_name,my_col
) as t1
group by restaurant_id,restaurant_name;
結果:
restaurant_id restaurant_name tot_result
1 Burger King [{category_id: 1 category_title: 'Normal Burger'},{category_id: 2 category_title: 'Beef Burger'}]
2 Coffee shop [{category_id: 3 category_title: 'Coffee'},{category_id: 4 category_title: 'Tea'}]
演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/428228.html
上一篇:我想訪問總金額的產品
