Есть вот такая табличка. Нужно придумать запрос, при котором "пользователь" вводит ингредиенты, и получает номер рецептов на которые есть ингредиенты (кол-во в данный момент не играет роли).
select Recipie_ID
from Table
group by Recipie_ID
having count(1) = sum(ingredient in('Яйцо куриное', 'Мука пшеничная', ...))
Берет те рецепты в которых общее количество ингредиентов точно равно количеству ингредиентов совпавших со списком. Но при этом наличие в рецепте всех ингредиентов из списка не обязательно. Если надо искать на точное соответствие то надо проверять count(1) на равенству размера заданного списка.
Если надо учитывать еще и количества ингредиентов, то в sum() надо будет писать более сложные условия вроде (ingredient='Яйцо' and quantity <= 5) OR (igreditent=X and quantity <= Y)
. Набор условий после совпадения дает 1, при не совпадении 0, собственно эти 0 и 1 и считает sum(). И конечно в БД надо все держать в предопределенных единицах измерения. Сравнивать "1/4 стакана" с "50 мл" не представляется возможным.
Виртуальный выделенный сервер (VDS) становится отличным выбором