Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在MySQL中按关联表中的匹配数对行进行排序?_Mysql_Sql_Sql Order By - Fatal编程技术网

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

如何在MySQL中按关联表中的匹配数对行进行排序?,mysql,sql,sql-order-by,Mysql,Sql,Sql Order By,我很抱歉,因为我真的不知道如何正确形成我的问题,所以我将解释我的问题: 我有3个简单的MySQL表: 表recipes和列id以及许多其他对该问题不重要的内容 表成分有两列:id,name 具有两个ID列的关联表ID\u配料,ID\u配料和ID\u配料 现在我想让用户搜索他们的成分食谱。用户可以一次指定一种或多种成分。我知道当我需要匹配所有用户成分的配方或至少匹配其中一种成分的配方时,如何编写SQL 但我的问题是,我如何订购菜谱,以便第一个菜谱的成分与用户搜索的成分匹配最多 我整天都在想这个

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

我有3个简单的MySQL表:

  • recipes
    和列
    id
    以及许多其他对该问题不重要的内容
  • 成分
    有两列:
    id
    name
  • 具有两个ID列的关联表
    ID\u配料
    ID\u配料
    ID\u配料
现在我想让用户搜索他们的成分食谱。用户可以一次指定一种或多种成分。我知道当我需要匹配所有用户成分的配方或至少匹配其中一种成分的配方时,如何编写SQL

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

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

EDIT:我的SQL查询条件是,我希望所有配方在
recipes\u components
表中至少有一种成分,但我希望这些匹配配方按搜索成分的匹配数量排序

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

未验证:

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 

“最匹配”是什么意思?所有结果配方是否都应该包含所有输入成分?一些表格数据也会非常有用。例如,请参见或(密切相关)您能提供一些示例数据、您将搜索的示例以及您期望的结果吗?我想您需要1其他0好的,我将编辑我的问题以使其更清楚,等等。@juergen d:看起来很有希望,我会测试它,让它知道它是如何工作的。这正是我想要的。非常感谢。