какой придумать SQL запрос

158
21 мая 2019, 09:40

Есть вот такая табличка. Нужно придумать запрос, при котором "пользователь" вводит ингредиенты, и получает номер рецептов на которые есть ингредиенты (кол-во в данный момент не играет роли).

Answer 1
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 мл" не представляется возможным.

READ ALSO
Как работать с таблицей многие к многим?

Как работать с таблицей многие к многим?

База для фирмы сборки компьютеровЕсть 5 таблиц

147
как сделать группировку по дням mysql?

как сделать группировку по дням mysql?

Подскажите с запросом:

140
Проблема шрифтов на mac os mojave

Проблема шрифтов на mac os mojave

Использую Грузинский шрифтРаньше все было в порядке

193