Фильтрация данных при связи много к многим
У меня в базе данных аптеки есть 4 таблицы: продукт (id продукта, имя и т.д) продукт_заболевание - таблица для связи много ко многим, в ней id продукта, id заболевания заболевания - (id заболевания, имя, его категория) категории заболеваний - (id категории, имя) Таблицы связаны между собой (ниже показано как). Я пытаюсь реализовать фильтрацию и выбрать из таблицы имя того продукта, категория заболевания которого равна какому-либо значению, например "Тест". Собственно, вопрос: как построить такой запрос? Прбовал так:
SELECT products.name FROM `products`, `diseases_category` WHERE `diseases_category`.`name` = "Тест"
Но получаю просто названия всех продуктов в таблице. (Прошу простить за оформление, пытался дать как можно больше информации)
Дамп
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
CREATE DATABASE IF NOT EXISTS `Example` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
USE `Example`;
CREATE TABLE `diseases` (
`id` int(11) NOT NULL,
`name` varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `diseases` (`id`, `name`) VALUES
(1, 'Заболевание1'),
(2, 'Заболевание2'),
(3, 'Заболевание3'),
(4, 'Заболевание4'),
(5, 'Заболевание5\r\n'),
(6, 'Заболевание6'),
(7, 'Тест');
CREATE TABLE `diseases_category` (
`id_category` int(11) NOT NULL,
`name` varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `diseases_category` (`id_category`, `name`) VALUES
(1, 'Категория1'),
(2, 'Категория2'),
(3, 'Категория3'),
(4, 'Категория4'),
(5, 'Категория5'),
(6, 'Категрия6'),
(7, 'Категрия7'),
(8, 'Категрия8'),
(9, 'Категрия9'),
(10, 'Тест');
CREATE TABLE `diseases_product` (
`id_disease` int(11) NOT NULL,
`id_product` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `diseases_product` (`id_disease`, `id_product`) VALUES
(1, 1),
(2, 1),
(3, 1),
(4, 1),
(5, 1),
(6, 1),
(6, 2),
(7, 2);
CREATE TABLE `products` (
`product_id` int(11) NOT NULL,
`name` varchar(100) NOT NULL DEFAULT 'Без назви',
`manufacturer` varchar(255) DEFAULT NULL,
`release_form` varchar(255) DEFAULT NULL,
`image_path` varchar(100) DEFAULT NULL,
`Instruction` text,
`cooking_method` text
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `products` (`product_id`, `name`, `manufacturer`, `release_form`, `image_path`, `Instruction`, `cooking_method`) VALUES
(1, 'Продукт1', NULL, NULL, NULL, NULL, NULL),
(2, 'Тест', NULL, NULL, NULL, NULL, NULL);
ALTER TABLE `diseases`
ADD PRIMARY KEY (`id`);
ALTER TABLE `diseases_category`
ADD PRIMARY KEY (`id_category`);
ALTER TABLE `diseases_product`
ADD KEY `id_product` (`id_product`),
ADD KEY `id_disease` (`id_disease`);
ALTER TABLE `products`
ADD PRIMARY KEY (`product_id`);
ALTER TABLE `diseases`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=8;
ALTER TABLE `diseases_category`
MODIFY `id_category` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=11;
ALTER TABLE `products`
MODIFY `product_id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3;
ALTER TABLE `diseases`
ADD CONSTRAINT `diseases_ibfk_1` FOREIGN KEY (`id`) REFERENCES `diseases_category` (`id_category`) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE `diseases_product`
ADD CONSTRAINT `diseases_product_ibfk_1` FOREIGN KEY (`id_disease`) REFERENCES `diseases` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT `diseases_product_ibfk_2` FOREIGN KEY (`id_product`) REFERENCES `products` (`product_id`) ON DELETE CASCADE ON UPDATE CASCADE;
COMMIT;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
