В настоящее время я разрабатываю базу данных (MySQL) для рецептов напитков и хочу, чтобы пользователи могли вводить, какие ингредиенты у них есть, и я дам им все рецепты, которые включают только этих ингредиентов. Мне нужен запрос, в котором я могу выбрать все напитки из таблицы drinks
, где единственные ингредиенты похожи (). Причина в том, что кто-то может ввести водку или водку smirnoff, но я угощу их как то же самое ) ингредиенты в таблице user_ingredients
Вот три таблицы, которые будут задействованы в этом запросе:
напитки
CREATE TABLE `drinks` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`drink` varchar(64) NOT NULL DEFAULT '',
`glass` int(11) unsigned NOT NULL,
`instructions` text,
PRIMARY KEY (`id`),
UNIQUE KEY `un_drink` (`drink`),
KEY `in_id` (`id`),
KEY `fk_glass` (`glass`),
CONSTRAINT `fk_glass` FOREIGN KEY (`glass`) REFERENCES `glasses` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=11946 DEFAULT CHARSET=utf8;
recipe_ingredients
CREATE TABLE `drink_ingredients` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`drink` int(11) unsigned NOT NULL,
`ingredient` int(11) unsigned NOT NULL,
`amount` int(11) unsigned DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `in_drink` (`drink`),
KEY `in_ingredient` (`ingredient`),
KEY `fk_amount` (`amount`),
CONSTRAINT `fk_amount` FOREIGN KEY (`amount`) REFERENCES `amounts` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT `fk_drink` FOREIGN KEY (`drink`) REFERENCES `drinks` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT `fk_ingredient` FOREIGN KEY (`ingredient`) REFERENCES `ingredients` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=46026 DEFAULT CHARSET=utf8;
user_ingredients
CREATE TABLE `user_ingredients` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`user` int(11) unsigned DEFAULT NULL,
`ingredient` int(11) unsigned DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `fk_user_ingredient` (`ingredient`),
CONSTRAINT `fk_user_ingredient` FOREIGN KEY (`ingredient`) REFERENCES `ingredients` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
Спасибо, я застрял на этом некоторое время.
-Stefan