我有一个配方应用程序,其中包含两个主要表格,如下所示;
其中recipe_ingredients包含链接到配方的多行,并保存有关每种成分的信息。
我试图在数据库上执行搜索,以返回包含' chicken'和米饭'作为一种成分,但我目前的查询没有结果,因为我相信它正在寻找鸡肉和大米是单一成分(排)的成分。
这是我的疑问;
SELECT r.* FROM recipe AS r
INNER JOIN recipe_ingredient AS ri ON ri.recipe_id = r.id
WHERE (ri.name LIKE '%chicken%' OR ri.full_description LIKE '%chicken%') AND (ri.name LIKE '%rice%' OR ri.full_description LIKE '%rice%')
GROUP BY r.id
上述查询根本没有返回任何结果,但数据库中有以鸡肉和大米为原料的配方。
答案 0 :(得分:2)
一旦食谱中的成分既不是米饭也不是鸡肉,这种情况就会失败;你必须使用一个内部查询来查看每个食谱中是否存在给定的成分。
这样的事情:
SELECT r.* FROM recipe AS r
WHERE EXISTS (
SELECT *
FROM recipe_ingredient ri
WHERE ri.recipe_id = r.id
AND (ri.name LIKE '%chicken%' OR ri.full_description LIKE '%chicken%')
)
AND EXISTS (
SELECT *
FROM recipe_ingredient ri
WHERE ri.recipe_id = r.id
AND (ri.name LIKE '%rice%' OR ri.full_description LIKE '%rice%')
)
这不是很优雅,但你明白我的意思。