我道歉,因为我真的不知道如何正确地形成我的问题,所以我将解释我的问题:
我有3个简单的MySQL表:
>具有列id的表配方和许多其他对此问题不重要的配方
>表格成分有2列:id,name
>关联表recipes_ingredients具有2个ID列id_recipes和id_ingredients
现在我希望用户按其成分搜索食谱.用户可以一次指定一种或多种成分.我知道如何为这种情况编写SQL,因为我希望配方能够匹配所有用户的成分或与至少一种成分匹配的配方.
但我的问题是,如何订购配方,以便第一个配方与用户搜索的配料相匹配.
我整天都在考虑这个问题,但我没有提出任何想法.感谢您提前提供任何帮助或提示.
编辑:我的SQL查询的条件是,我想要所有在recipes_ingredients表中至少有一个成分的配方,但我希望那些匹配的配方按搜索成分的匹配数量排序.
例如:用户搜索3种成分.有10种配方至少含有这些成分中的一种.但是我想对它们进行排序,因此第一个配方可能是匹配所有3个搜索成分的配方.然后将是仅匹配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