4

質問を正しく形成する方法が本当にわからなかったため、お詫び申し上げます。問題を説明します。

3 つの単純な MySQL テーブルがあります。

  • recipesこの問題にとって重要ではない列idと他の多くのテーブル
  • ingredients2 列のテーブル: idname
  • recipes_ingredients2 つの ID 列を持つ連想テーブルid_recipesid_ingredients

今、私はユーザーに材料でレシピを検索してもらいたい. ユーザーは一度に 1 つ以上の成分を指定できます。ユーザーのすべての食材に一致するレシピ、または少なくとも 1 つの食材に一致するレシピが必要な場合の SQL の書き方を知っています。

しかし、私の質問は、最初のレシピが、ユーザーが検索した成分と最も多くの成分を含むレシピになるように、レシピを注文するにはどうすればよいかということです。

私はこれについて一日中考えていましたが、アイデアが思い浮かびませんでした。事前に助けやヒントをありがとう。

編集: SQL クエリの私の条件は、recipes_ingredientsテーブルに少なくとも 1 つの成分を含むすべてのレシピが必要ですが、一致するレシピを検索された成分の一致数で並べ替えたいということです。

例: ユーザーが 3 つの食材を検索します。これらの材料の少なくとも 1 つが存在する 10 のレシピがあります。しかし、それらを並べ替えたいので、最初のレシピは、検索された 3 つの材料すべてに一致する可能性があるものになります。次に、材料が 2 つだけ一致するレシピがあり、最後に、材料が 1 つだけ一致するレシピがあります。

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 に答える