использую структуру CREATE TABLE `products` ( `productId` int(11) NOT NULL AUTO_INCREMENT, `description` mediumtext NOT NULL, PRIMARY KEY (`productId`) ) ENGINE=InnoDB CREATE TABLE `product_color` ( `productId` int(11) NOT NULL, `color` varchar(6) NOT NULL, PRIMARY KEY (`productId`,`color`) ) ENGINE=InnoDB во второй таблице у одного товара может быть несколько цветов. как взять товары у которых есть все какие-то несколько цветов и не брать те у которых есть хотя бы один из них.
сделать выборку id тех, у которых есть цвет, который тебе не нравится, из тех которые подходят шаг второй - выбрать тех у кого есть тот цвет или те цвета которые нужны, но `id` NOT IN (тут айдишники с плохим цветом) кажется так
я, скорее всего, неверно выразился. допустим дамп Код (Text): ... (4, '34e3e5'), (5, '205260'), (5, '33151a'), (5, '34e3e5'), (5, '46008c'), (6, '46008c'), ... когда я выбрал '46008c' и '34e3e5' чтоб выходил айди только 5, так как только в 5 есть эти оба цвета. ну и если где-то еще есть, чтоб они тоже естественно выходили.
SELECT *, sum(1) as k FROM `product_color` WHERE `color`= '46008c' or `color` = '34e3e5' group by `productId` having k=2 правда для корректной работы тогда нужно обеспечить уникальность по этим 2-м полям, но это как минимум логично Код (Text): ALTERTABLE`product_color`ADDUNIQUE ( `productId` , `color` ); иначе придется возится со вложенным запросом и distinct-ом, к тому же тяжелый запрос получится, неэффективный