Здравствуйте.
Проблема такая.
Есть таблицы
CREATE TABLE `parameters` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`dimension` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=41 DEFAULT CHARSET=utf8ж
CREATE TABLE `param_values` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`value` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `value` (`value`)
) ENGINE=InnoDB AUTO_INCREMENT=228175 DEFAULT CHARSET=utf8;
CREATE TABLE `param_state` (
`id_param_name` int(11) NOT NULL DEFAULT '0',
`id_param_value` int(11) NOT NULL DEFAULT '0',
`id_acessory` int(11) NOT NULL DEFAULT '0',
`id_category` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id_param_name`,`id_param_value`,`id_acessory`,`id_category`),
KEY `id_param_value` (`id_param_value`),
KEY `id_acessory` (`id_acessory`),
KEY `id_category` (`id_category`),
CONSTRAINT `param_state_ibfk_1` FOREIGN KEY (`id_param_name`) REFERENCES `parameters` (`id`),
CONSTRAINT `param_state_ibfk_2` FOREIGN KEY (`id_param_value`) REFERENCES `param_values` (`id`),
CONSTRAINT `param_state_ibfk_3` FOREIGN KEY (`id_acessory`) REFERENCES `acessories` (`id`),
CONSTRAINT `param_state_ibfk_4` FOREIGN KEY (`id_category`) REFERENCES `categories` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `acessories` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`artikul` varchar(255) DEFAULT NULL COMMENT 'Артикул детали',
`name` varchar(255) DEFAULT NULL COMMENT 'Название детали',
`description` text COMMENT 'Описание',
`price` float DEFAULT NULL COMMENT 'Последняя цена',
`lastupd` int(11) DEFAULT NULL COMMENT 'timestamp последнего обновления цены',
`fullname` varchar(255) DEFAULT NULL COMMENT 'Расширенное название',
`addtime` int(11) DEFAULT NULL COMMENT 'Время добавления',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=38166 DEFAULT CHARSET=utf8;
CREATE TABLE `categories` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`category` varchar(255) DEFAULT NULL COMMENT 'Название категории',
`pseudonim` varbinary(255) DEFAULT NULL COMMENT 'Псевдоним страницы',
PRIMARY KEY (`id`),
KEY `pseudonim` (`pseudonim`)
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8;
CREATE TABLE `param_values` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`value` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `value` (`value`)
) ENGINE=InnoDB AUTO_INCREMENT=228175 DEFAULT CHARSET=utf8
В таблице parameters название параметра
В таблице param_values значение параметра
В таблице categories название категории
В таблице acessories записи с товарами
В таблице param_state соотношение категории с записью о товаре, с именем параметра и его значением.
Надо выбрать товары, подходящие под условия фильтра. Делаю так
SELECT a.id, a.`artikul`, a.`name`, a.`description`, a.`fullname`FROM acessories AS a
INNER JOIN acessory_state AS acs ON acs.`id_acessory`=a.`id`
INNER JOIN categories AS c ON c.`id`=acs.`id_category`
INNER JOIN param_state AS ps ON ps.`id_category`=c.`id` AND ps.`id_acessory`=a.`id`
INNER JOIN parameters AS p ON p.`id`=ps.`id_param_name`
INNER JOIN param_values AS pv ON pv.`id`=ps.`id_param_value`
WHERE ps.`id_category`=1 AND ps.`id_param_value`=3 AND ps.`id_param_name`=16
Но это выборка товара, соответствующего только одному критерию. Как сделать выборку по нескольким параметрам? Добавление дополнительных AND, например AND ps.`id_param_value`=1 AND ps.`id_param_name`=18 приводит к пустой выборке
Уважаемые гуру, подскажите, как правильно это сделать?