У меня есть таблица со следующей схемой в MySQLпоиск для всех комбинаций значений в столбце из определенного подмножества
Recipe_Quantity_ID, Recipe_ID, Recipe_Quantity, Ingredients_ID, Ingredient_Measurement_ID
Данные образцы могут быть найдены в это SQL Fiddle http://sqlfiddle.com/#!2/d05fe.
Я хочу найти таблицу для данных (одного или многих) Ingredients_ и вернуть Recipe_ID, который имеет этот Ingredients_ID
Я делаю это с помощью этого SQL
select Recipe_ID
from recipe_quantity
group by Recipe_ID
having count(*) = {$ar_rows}
and sum(Ingredients_ID in ({$ids})) = {$ar_rows}
, который может перевести на
select Recipe_ID
from recipe_quantity
group by Recipe_ID
having count(*) = 4
and sum(Ingredients_ID in (8,5,45,88)) = 4
Для поиска меньше Ingredients_ID Я вычитаю последний идентификатор, пока не достигню одного Ингредиента. С помощью этой методики, конечно, невозможно найти все комбинации. Например, 8,5,45,85 | 8,45,85 | 45,85 | 5,45,85 и т. Д.
Любые идеи, как я могу искать все комбинации, которые могут быть правдой? Заранее спасибо.
Да, вы понимаете правильно, код работает отлично, но я не могу полностью понять ваш код. Я потерял тебя слева. Хотя я получил ответ, который искал, я хотел бы понять код. Если у вас есть время, оставьте комментарий, объясняющий это решение. Большое спасибо и с Новым годом. – Kiki
Если вы хотите лучше понять соединения, это хороший пост http://stackoverflow.com/questions/38549/difference-between-inner-and-outer-joins/16598900#16598900. В частности, я использую левое соединение и проверяю значение null, чтобы исключить любой рецепт, который содержит ингредиенты, которых у вас нет. "not in (list)" надеюсь, что это поможет ... Happy NY 2u2 :-) –
Большое спасибо за ответ и сослался на него, чтобы понять его. – Kiki