MySQL сопоставление отношений между многими - PullRequest
2 голосов
/ 08 июля 2011

Я создаю базу данных коктейлей, и сейчас у меня есть три таблицы:

  • напитки имеют столбцы напитков_ид и напитков_имя
  • Третий - это простая таблица отношений, называемая рецептами, в которой есть drink_id и ингридиенты_id

Я хочу запросить базу данных с набором ингредиентов_данных и получить набор напитков, доступных из этого набора ингредиентов. Например, если напиток A содержит ингредиенты (1,2), напиток B содержит (1,3), а напиток C содержит (1,2,3), вводимые ингредиенты 1,2 и 3 должны возвращать напитки A, B и C. Я только начал учить себя проектированию баз данных с MySQL, и любая помощь очень ценится. Извините, если на этот вопрос ответили в другом месте, я пытался, но не знал, как его искать.

Ответы [ 3 ]

2 голосов
/ 08 июля 2011

TRY

SELECT d.drink_name
FROM tbl_drink d
INNER JOIN tbl_receipe r ON r.drink_id=d.drink_id
INNER JOIN tbl_ingredient i ON i.ingredient_id = r.ingredient_id
WHERE `given ID` IN (i.ingredient_id)
1 голос
/ 08 июля 2011
select * from drink d where
  exists (select * from recipe where drink_id = d.drink_id and ingred_id = ?) and
  exists (select * from recipe where drink_id = d.drink_id and ingred_id = ?) and
  [...]

Bind ? и добавьте exists для каждого ингредиента в наборе.

0 голосов
/ 08 июля 2011
SELECT d.drinks_name
FROM drinks d
JOIN recipes AS r ON (r.drinks_id = d.drinks_id)
JOIN ingredients AS i1 ON (i1.ingredients_id = r.ingredients_id)
JOIN ingredients AS i2 ON (i2.ingredients_id = r.ingredients_id)
...
JOIN ingredients AS iN ON (iN.ingredients_id = r.ingredients_id)
WHERE
    i1.ingredients_name = ${first_ingredient}
    i2.ingredients_name = ${second_ingredient}
    ...
    iN.ingredients_name = ${Nth_ingredient}
...