我对领域不熟悉。我有一个如下的架构:
class MealItem {}
MealItem.schema = {
name: 'MealItem',
properties: {
mealId: {type: 'int'},
foodId: {type: 'int'},
},
};
我想做相同的事情:
SELECT
mealId
FROM MealItem
WHERE foodId = @food1
AND mealId IN (SELECT mealId FROM MealItem WHERE foodId = @food2
AND mealId IN (SELECT mealId FROM MealItem WHERE foodId = @food3))
我不知道从哪里开始,除了为循环编写大量的javascript。是否有一种不那么冗长的方式呢?
更多信息
基本上我还有另外两个这样的对象:
class Meal {}
Meal.schema = {
name: 'Meal',
properties: {
mealId: {type: 'int'},
mealName: {type: 'string'},
},
};
class Food{}
Food.schema = {
name: 'Food',
properties: {
foodId: {type: 'int'},
foodName: {type: 'string'},
},
};
所以我的原始查询是为了确定是否给出了3种不同的食物,我的餐厅是否提供了一餐/组合。
例如,如果您将food1设置为 Big Mac ,food2设置为 Fries ,food3设置为 Soft Drink ,您应该回来吃饭叫做 Big Mac Meal 。
如果您将food1设置为榴莲,将food2设置为热口袋,将food3设置为 Krusty Brand Imitation Gruel ,则不会返回任何用餐ID,因为我的餐厅没有这样的组合服务。
答案 0 :(得分:1)
我对SQL并不了解,但我从您的问题中了解到,您正在尝试寻找含有特定食物的食物。
Realm查询和模型的工作方式类似于NoSQL数据库,因此在创建模型时可能需要稍微考虑一下。
例如,假设您有3个表。一个包含膳食,一个包含食物,一个包含MealId
包含哪个FoodId
的数据。在Realm中你不需要3桌。你可以认为它是一个javascript对象。
实施例
const meal = {
mealId: 0001,
name: 'Big Fat Menu',
price: '4.99'
foods: [{
foodId: 11,
name: 'Burger'
}, {
foodId: 12,
name: 'Fries'
}, {
foodId: 13,
name: 'Coke'
}]
}
这个javascript对象可以像Realm这样
建模const FoodSchema = {
name: 'Food',
primaryKey: 'foodId',
properties: {
foodId: 'string'
name: 'string',
}
};
const MealsSchema = {
name: 'Meal',
primaryKey: 'mealId',
properties: {
mealId: 'string'
name: 'string',
price: 'double',
foods: { type: 'list', , objectType: 'Food'}
}
};
使用此模式,您可以进行以下查询以获得包含特定食物的膳食
const meals = realm..objects('Meal').filtered(`foods.id == ${foodId}`)
这只是一个小例子来帮助你。希望它有所帮助。