Direct 中的自定义 SQL 查询
Custom SQL queries in Directus
假设我有这种 MySQL 数据库结构:
菜单:
id name
3 Tartiflette
4 Lasagne
成分:
id name price
15 Carrot 2.00
39 Garlic 3.00
40 Reblochon 5.00
55 Onion 1.00
Menu_ingredient :
id ingredient_id menu_id quantity
4 15 4 2
5 55 4 1
6 39 4 1
7 40 3 2
8 55 3 3
Resa_menu :
id resa_id menu_id people
1 1 4 3
2 1 3 2
雷萨:
id
1
如何使用带有项目/端点的查询参数从一次预订中获取所有成分?
我尝试使用 items/resa_menu?fields=*.*(和其他一些组合,但运气不好)进行查询。
我还设置了一个 SQL 视图(虚拟 table)来获取查询所需的所有信息,但是这种 SQL 似乎不会被 Directus 获取.
SELECT
ingredient.name as ing_name,
(resa_menu.people * ingredient.price) as price,
(resa_menu.people * menu_ingredient.quantity) as quantity
FROM resa_menu
INNER JOIN menu ON menu.id = resa_menu.menu_id
INNER JOIN resa ON resa.id = resa_menu.resa_id
INNER JOIN menu_ingredient ON menu_ingredient.menu_id = menu.id
INNER JOIN ingredient ON ingredient.id = menu_ingredient.ingredient_id
GROUP BY ingredient.id;
预期输出:
ing_name price quantity
Carrot 6.00 6
Garlic 9.00 3
Reblochon 10.00 4
Onion 3.00 3
这里的具体目标是获取预订所需的所有食材的汇总(合并所有菜单,数量乘以人数)。但我的问题更笼统:如何使用 Directus API ?
像在这个查询中那样执行多个 JOIN
非常感谢您的帮助!
使用左连接,不需要分组
select i.name,(i.price* coalesce(rm.people,1)) as price,
(mi.quantity*coalesce(rm.people,1)) as quantity
from Ingredient i left join
Menu_ingredient mi on i.id =mi.ingredient_id
left join Resa_menu rm on mi.menu_id =rm.menu_id
我认为您的意思是您正在请求端点 /items/Resa_menu
并执行 *.*
返回 Menu_ingredient
相关数据,但是您还想要返回成分列表吗?为此,您是否不只是将字段查询更改为 *.*.*
以获得三个级别的关系?
还是 ?fields=*.*
根本不起作用?
假设我有这种 MySQL 数据库结构:
菜单:
id name
3 Tartiflette
4 Lasagne
成分:
id name price
15 Carrot 2.00
39 Garlic 3.00
40 Reblochon 5.00
55 Onion 1.00
Menu_ingredient :
id ingredient_id menu_id quantity
4 15 4 2
5 55 4 1
6 39 4 1
7 40 3 2
8 55 3 3
Resa_menu :
id resa_id menu_id people
1 1 4 3
2 1 3 2
雷萨:
id
1
如何使用带有项目/端点的查询参数从一次预订中获取所有成分?
我尝试使用 items/resa_menu?fields=*.*(和其他一些组合,但运气不好)进行查询。
我还设置了一个 SQL 视图(虚拟 table)来获取查询所需的所有信息,但是这种 SQL 似乎不会被 Directus 获取.
SELECT
ingredient.name as ing_name,
(resa_menu.people * ingredient.price) as price,
(resa_menu.people * menu_ingredient.quantity) as quantity
FROM resa_menu
INNER JOIN menu ON menu.id = resa_menu.menu_id
INNER JOIN resa ON resa.id = resa_menu.resa_id
INNER JOIN menu_ingredient ON menu_ingredient.menu_id = menu.id
INNER JOIN ingredient ON ingredient.id = menu_ingredient.ingredient_id
GROUP BY ingredient.id;
预期输出:
ing_name price quantity
Carrot 6.00 6
Garlic 9.00 3
Reblochon 10.00 4
Onion 3.00 3
这里的具体目标是获取预订所需的所有食材的汇总(合并所有菜单,数量乘以人数)。但我的问题更笼统:如何使用 Directus API ?
像在这个查询中那样执行多个 JOIN非常感谢您的帮助!
使用左连接,不需要分组
select i.name,(i.price* coalesce(rm.people,1)) as price,
(mi.quantity*coalesce(rm.people,1)) as quantity
from Ingredient i left join
Menu_ingredient mi on i.id =mi.ingredient_id
left join Resa_menu rm on mi.menu_id =rm.menu_id
我认为您的意思是您正在请求端点 /items/Resa_menu
并执行 *.*
返回 Menu_ingredient
相关数据,但是您还想要返回成分列表吗?为此,您是否不只是将字段查询更改为 *.*.*
以获得三个级别的关系?
还是 ?fields=*.*
根本不起作用?