如何在MySQL中按关联表中的匹配数量排序行?

时间:2013-09-11 12:44:41

标签: mysql sql sql-order-by

我道歉,因为我真的不知道如何正确地形成我的问题,所以我会解释我的问题:

我有3个简单的MySQL表:

  • recipesid以及许多其他对此问题不重要的
  • 表格ingredients包含2列:idname
  • 关联表recipes_ingredients,包含2个ID列id_recipesid_ingredients

现在我希望用户按其成分搜索食谱。用户可以一次指定一种或多种成分。我知道如何为这种情况编写SQL,因为我希望食谱能够匹配所有用户的成分或与至少一种成分相匹配的食谱。

但我的问题是,我如何订购食谱,以便第一个食谱与用户搜索的成分匹配最多的食谱。

我整天都在考虑这个问题,但我没有提出任何想法。感谢您提前提供任何帮助或提示。

编辑:我对SQL查询的条件是,我想要所有在recipes_ingredients表中至少有一个成分的配方,但我希望那些匹配的配方按数量排序搜索成分的匹配。

例如:用户搜索3种成分。有10种配方至少含有这些成分中的一种。但是我想对它们进行排序,因此第一个配方可能是匹配所有3个搜索成分的配方。然后将是仅匹配2种成分的食谱,最后将是仅含有一种匹配成分的食谱。

1 个答案:

答案 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