我道歉,因为我真的不知道如何正确地形成我的问题,所以我会解释我的问题:
我有3个简单的MySQL表:
recipes
列id
以及许多其他对此问题不重要的ingredients
包含2列:id
,name
recipes_ingredients
,包含2个ID列id_recipes
和id_ingredients
现在我希望用户按其成分搜索食谱。用户可以一次指定一种或多种成分。我知道如何为这种情况编写SQL,因为我希望食谱能够匹配所有用户的成分或与至少一种成分相匹配的食谱。
但我的问题是,我如何订购食谱,以便第一个食谱与用户搜索的成分匹配最多的食谱。
我整天都在考虑这个问题,但我没有提出任何想法。感谢您提前提供任何帮助或提示。
编辑:我对SQL查询的条件是,我想要所有在recipes_ingredients
表中至少有一个成分的配方,但我希望那些匹配的配方按数量排序搜索成分的匹配。
例如:用户搜索3种成分。有10种配方至少含有这些成分中的一种。但是我想对它们进行排序,因此第一个配方可能是匹配所有3个搜索成分的配方。然后将是仅匹配2种成分的食谱,最后将是仅含有一种匹配成分的食谱。
答案 0 :(得分:2)
未验证:
select r.id, count(i.id) as ing_cnt
from recipes r
left join recipes_ingredients ri on ri.id_recipes = r.id
left join ingredients i on ri.id_ingredients = i.id
group by r.id
order by ing_cnt desc