提问人:Raikoug 提问时间:7/24/2023 更新时间:7/24/2023 访问量:18
优化 SQL 查询以使用具有外键的多个表的数组合并数据 [duplicate]
Optimizing SQL Query to Consolidate Data with Arrays for Multiple Tables with Foreign Keys [duplicate]
问:
我有多个带有外键的表,在使用联接合并当前 SQL 选择中的多个值时,我面临着挑战。当一个外国 ID 多次出现时,就会出现这个问题,导致查询返回具有相同数据的冗余行(一列除外),这是我为我兄弟开发的餐厅应用程序菜单。
下面是我当前使用的 SQL 代码,我已将其转换为视图:
select D.dish_id, TD.translation as dish_name, D.dish_price, TC.translation as cat_name, TI.translation as ing_name
from Dish D
join Dish_Category DC on D.dish_id = DC.dish_id
join Category C on DC.category_id = C.category_id
join Translations_Categories TC on C.category_id = TC.category_id and TC.language = "en"
join Translations_Dish TD on D.dish_id = TD.dish_id and TD.language = "en"
join Dish_Ingredient DI on D.dish_id = DI.dish_id
join Ingredient I on DI.ingredient_id = I.ingredient_id
join Translations_Ingredient TI on I.ingredient_id = TI.ingredient_id and TI.language = "en"
ORDER by D.dish_id
目前,查询返回所有具有冗余信息的元素,同一dish_id之间唯一的信息更改是ing_name列:
dish_id dish_name dish_price cat_name ing_name
1 Tomato Sauce 5.00 Pizzas Tomato
2 White Sauce 5.00 Pizzas Mozzarella
3 Margherita 5.00 Pizzas Tomato
3 Margherita 5.00 Pizzas Mozzarella
4 Napoli 6.00 Pizzas Tomato
4 Napoli 6.00 Pizzas Mozzarella
4 Napoli 6.00 Pizzas Capers
4 Napoli 6.00 Pizzas Anchovies
在这里,我有我需要的所有信息(不是真的,从图中可以看出,每种成分都有我需要的 2 个值,但每次有 1 个)。
但是,我想找到一种方法来合并数据,以便每个 ID 只有一行,并且成分名称被打包到相应列中的数组中。理想的结果如下所示:
dish_id dish_name dish_price cat_name ing_name
1 Tomato Sauce 5.00 Pizzas Tomato
2 White Sauce 5.00 Pizzas Mozzarella
3 Margherita 5.00 Pizzas [Tomato, Mozzarella]
4 Napoli 6.00 Pizzas [Tomato, Mozzarella, Capers, Anchovies]
展望未来,我需要让事情复杂化一点,每种成分都有 2 个不可告人的价值!也许是像 json 数据这样的东西?
dish_id dish_name dish_price cat_name ing_name
1 Tomato Sauce 5.00 Pizzas Tomato
2 White Sauce 5.00 Pizzas Mozzarella
3 Margherita 5.00 Pizzas {"Tomato": {"allergenes": false, "frozen" : false}, "Mozzarella": {"allergenes": true, "frozen" : false} }
4 Napoli 6.00 Pizzas {"Tomato": {"allergenes": false, "frozen": false}, "Mozzarella": {"allergenes": true, "frozen": false}, "Capers": {"allergenes": true, "frozen": false}, "Anchovies": {"allergenes": true, "frozen": false}}
我将不胜感激任何关于优化 SQL 查询和有效打包数据以供前端显示的指导或建议。此外,如果有更好的方法在前端显示数据,而不是使用视图的单个查询,请告诉我。谢谢!
答: 暂无答案
上一个:如何返回异步调用的响应?
评论