Я использую MySQL, и у меня есть небольшая проблема, из-за которой я пытаюсь найти решение Я могу достичь этого программно через PHP, используя несколько запросов, но я уверен, что могу сделать это как один запрос :)
У меня есть 3 таблицы:
- Продукты
- product_keywords
- valid_keywords
Каждый продукт имеет несколько ключевых слов, на которые ссылается ключевое слово в таблице «product_keywords». Таблица «valid_keywords» содержит только разрешенные ключевые слова (то есть как справочную таблицу). Мне нужно вернуть ТОЛЬКО продукты, ключевые слова которых соответствуют ключевым словам в таблице «valid_keywords».
В допустимых продуктах не должно быть ключевых слов, которых нет в таблице "valid_keywords".
Вот несколько тестовых таблиц / записей:
- Структура таблицы для столовых изделий
CREATE TABLE `products` (
`prod_id` int(11) NOT NULL,
`prod_name` varchar(10) NOT NULL,
KEY `prod_id` (`prod_id`)
);
- Данные для табличных продуктов
INSERT INTO `products` (`prod_id`, `prod_name`) VALUES(1, 'Prod 1');
INSERT INTO `products` (`prod_id`, `prod_name`) VALUES(2, 'Prod 2');
INSERT INTO `products` (`prod_id`, `prod_name`) VALUES(3, 'Prod 3');
INSERT INTO `products` (`prod_id`, `prod_name`) VALUES(4, 'Prod 4');
- Структура таблицы для таблицы product_keywords
CREATE TABLE `product_keywords` (
`prod_id` int(11) NOT NULL,
`keyword_id` int(11) NOT NULL,
KEY `prod_id` (`prod_id`),
KEY `keyword_id` (`keyword_id`)
);
- Данные для таблицы product_keywords
INSERT INTO `product_keywords` (`prod_id`, `keyword_id`) VALUES(1, 1);
INSERT INTO `product_keywords` (`prod_id`, `keyword_id`) VALUES(1, 2);
INSERT INTO `product_keywords` (`prod_id`, `keyword_id`) VALUES(2, 2);
INSERT INTO `product_keywords` (`prod_id`, `keyword_id`) VALUES(2, 4);
INSERT INTO `product_keywords` (`prod_id`, `keyword_id`) VALUES(3, 4);
INSERT INTO `product_keywords` (`prod_id`, `keyword_id`) VALUES(3, 6);
INSERT INTO `product_keywords` (`prod_id`, `keyword_id`) VALUES(4, 7);
INSERT INTO `product_keywords` (`prod_id`, `keyword_id`) VALUES(4, 8);
- Структура таблицы для таблицы valid_keywords
CREATE TABLE `valid_keywords` (
`keyword_id` int(11) NOT NULL,
`keyword_name` varchar(10) NOT NULL,
KEY `keyword_id` (`keyword_id`)
);
- Данные для таблицы valid_keywords
INSERT INTO `valid_keywords` (`keyword_id`, `keyword_name`) VALUES(2, 'Keyword 2');
INSERT INTO `valid_keywords` (`keyword_id`, `keyword_name`) VALUES(4, 'Keyword 4');
INSERT INTO `valid_keywords` (`keyword_id`, `keyword_name`) VALUES(7, 'Keyword 7');
INSERT INTO `valid_keywords` (`keyword_id`, `keyword_name`) VALUES(8, 'Keyword 8');
Для данных примера запрос должен возвращать продукты 2 и 4.
Надеюсь, вы, ребята, можете указать мне правильное направление.
Спасибо.