4

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

我有 3 个简单的 MySQL 表:

  • recipes带有列的表id和许多其他对这个问题不重要的表
  • ingredients有 2 列的表:id,name
  • recipes_ingredients具有 2 个 ID 列的关联表id_recipesid_ingredients

现在我希望用户按他们的成分搜索食谱。用户可以一次指定一种或多种成分。当我想要匹配所有用户成分的食谱或匹配至少一种成分的食谱时,我知道如何为这种情况编写 SQL。

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

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

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

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

4

1 回答 1

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 
于 2013-09-11T12:52:37.473 回答