質問を正しく形成する方法が本当にわからなかったため、お詫び申し上げます。問題を説明します。
3 つの単純な MySQL テーブルがあります。
recipes
この問題にとって重要ではない列id
と他の多くのテーブルingredients
2 列のテーブル:id
、name
recipes_ingredients
2 つの ID 列を持つ連想テーブルid_recipes
とid_ingredients
今、私はユーザーに材料でレシピを検索してもらいたい. ユーザーは一度に 1 つ以上の成分を指定できます。ユーザーのすべての食材に一致するレシピ、または少なくとも 1 つの食材に一致するレシピが必要な場合の SQL の書き方を知っています。
しかし、私の質問は、最初のレシピが、ユーザーが検索した成分と最も多くの成分を含むレシピになるように、レシピを注文するにはどうすればよいかということです。
私はこれについて一日中考えていましたが、アイデアが思い浮かびませんでした。事前に助けやヒントをありがとう。
編集: SQL クエリの私の条件は、recipes_ingredients
テーブルに少なくとも 1 つの成分を含むすべてのレシピが必要ですが、一致するレシピを検索された成分の一致数で並べ替えたいということです。
例: ユーザーが 3 つの食材を検索します。これらの材料の少なくとも 1 つが存在する 10 のレシピがあります。しかし、それらを並べ替えたいので、最初のレシピは、検索された 3 つの材料すべてに一致する可能性があるものになります。次に、材料が 2 つだけ一致するレシピがあり、最後に、材料が 1 つだけ一致するレシピがあります。