Directus中的自定义SQL查询

时间:2019-02-24 05:35:08

标签: sql 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

Resa:

id
1

如何使用带有项/端点的一个查询参数从一个预订中获取所有配料?

我尝试使用items / resa_menu?fields = *。*(和其他一些组合,但是很不走运)进行查询。

我还设置了一个SQL View(虚拟表),以获取查询所需的所有信息,但是Directus似乎无法获取这种SQL。

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?

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

我认为您的意思是您正在请求端点/items/Resa_menu,而*.*返回的是Menu_ingredient相关数据,但是您是否还希望返回一份配料表?为此,您不只是将字段查询更改为*.*.*以获得三个级别的关系吗?

还是?fields=*.*根本不起作用?

答案 1 :(得分:1)

使用左联接,不需要分组依据

=IF(OR(TEST<10,TEST>15),"FAIL","OK")