根据用户输入搜索SQLite数据库

时间:2016-09-27 12:31:53

标签: android sqlite search recipe

我正在创建一个Android应用,根据用户选择的成分搜索食谱。对于我的生活,我无法找出必要的查询。

我有食谱和成分表,以及RecipeIngredient联合表,其中包含RecipeId和IngredientId列,用作食谱和所需成分之间的连接。

例如,让我们说用户选择3种成分并点击搜索,为了显示使用这3种成分的食谱,所需的查询是什么?

我一直想弄明白,但我对我需要做的事情一无所知。

3 个答案:

答案 0 :(得分:0)

如果您搜索的是基于用户输入的成分的名称(您也可以使用LIKE),则可以这样做:

i++;

//注意:如果用户选择的成分是成分类的对象,那么您不需要此查询,因为您可以立即获取它们的ID,假设您在Ingredient类中有字段ID。

然后,您提取用户选择的这三种成分的ID,并将它们放入下面的查询中:

SELECT * FROM ingredient WHERE name='name_of_ingredient'

您将获得所有配方ID,其中包含任何这些成分。虽然,你只想要那些包含所有这些内容的人,所以只需仔细阅读你的食谱并计算每个ID的外观。并且只打印出结果中恰好是3x的那些。

当然有一种更有效的方法,这只是为了向您展示一个快速的解决方案。

答案 1 :(得分:0)

你需要使用"喜欢"您的查询中的关键字 -

例如 -

 select * from Ingredients where ingredient like 
'%ingredient1%' or ingredient like '%ingredient2%'

上述查询将显示将使用任何成分的数据(配方)。如果要显示包含每种成分的数据,可以使用'和'代替'或'。

另外,我建议你在表格中用任何分隔符(例如逗号,管道,分号等)分离成分,以便区分两种以上相同配方的成分。

示例 - 如果你保存" || ingredient1 || ingredient2 || ingredient3"在你的表中,

(我已使用2个连续的管道作为分隔符来区分两种成分,以便您可以相应地过滤搜索)

然后,您的查询就像 -

select * from Ingredients where ingredient like 
    '%||ingredient1%' or ingredient like '%||ingredient2%'

答案 2 :(得分:0)

SELECT DISTINCT recipes_names FROM Recipe WHERE id =(SELECT RecipeId FROM RecipeIngredient WHERE IngredientId =(SELECT id FROM Ingredient WHERE ingredients_name LIKE<%ingridient_1%,%ingridient_2%,%ingridient_3%>)

所以recipes_names和ingredients_name - 相应的配方和成分中的列。

但我们需要更多详细信息才能获得完整答案