Для следующих двух таблиц
+-----------+-----------+
| recipe_id | some_data |
+-----------+-----------+
| 1 | etc |
| 2 | etc |
+-----------+-----------+
и
+----------------+-----------+
| ingredients_id | recipe_id |
+----------------+-----------+
| 1 | 1 |
| 1 | 2 |
| 2 | 1 |
| 2 | 3 |
+----------------+-----------+
На основе набора ингредиентов я бы хотел выбрать рецепты с наибольшим количеством совпадений.
например, если я буду запрашивать «молоко, яйцо, соль», я получу recipe_id 1 в качестве первого результата (потому что у него было 2 совпадения), но если я буду искать «молоко», получая 1 или 3, как первый ответ, будет быть эквивалентным.
Мои текущие усилия не могут найти «лучший» вариант, но только «все или ничего», пересекая различные ингредиенты в рецепте (ing_id_1_input - ввод пользователя):
select r1.*
from (
select distinct ing1.recipe_id as recipe_id
from ingredients as ing1
where ing1.ing_id=ing_id_1_input) as prod_1 join
(select distinct ing2.recipe_id
from ingredients as ing2
where ing2.ing_id=ing_id_2_input) as prod_2
on prod_1.recipe_id=prod_2.recipe_id
join recipes as r1 on r1.recipe_id=prod_1.recipe_id