Я пытаюсь получить товар, соответствующий некоторым пользовательским параметрам.
Поэтому у меня есть три таблицы - продукты, параметры и параметры элементов.
Таблица продуктов:
CREATE TABLE `products` (
`ID` int(10) unsigned NOT NULL AUTO_INCREMENT
`Title` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`Content` longtext COLLATE utf8_unicode_ci NOT NULL,
`Price` float(10,2) unsigned NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Таблица параметров:
CREATE TABLE `parameters` (
`ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`Label` varchar(80) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Таблица элементов параметров:
CREATE TABLE `parametersitems` (
`ProductID` int(10) unsigned NOT NULL DEFAULT '0',
`ParameterID` int(10) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`ProductID`,`ParameterID`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Так что мой вопрос: как я могу получить только продукты, соответствующие всем параметрам.
Единственный способ, которым я мог придумать, - это присоединиться к таблице параметров параметров пару раз.
Например, вот запрос для получения продуктов, соответствующих двум параметрам:
SELECT
products.*
FROM
products
INNER JOIN
parametersitems AS paritems1
ON
paritems1.ItemID = products.ID
AND paritems1.ParameterID = 7
INNER JOIN
parametersitems AS paritems2
ON
paritems2.ItemID = products.ID
AND paritems2.ParameterID = 11
Меня беспокоит только то, что запрос SELECT будет становиться все медленнее и медленнее, если будет выбрано больше параметров.
Так есть ли лучший способ справиться с этой проблемой?
Спасибо