За последние 24 часа нас посетили 62922 программиста и 1747 роботов. Сейчас ищут 775 программистов ...

товары у каждого несколько цветов

Тема в разделе "MySQL", создана пользователем Gom3r, 16 май 2012.

  1. Gom3r

    Gom3r Активный пользователь

    С нами с:
    9 июл 2009
    Сообщения:
    7
    Симпатии:
    0
    использую структуру
    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

    во второй таблице у одного товара может быть несколько цветов.
    как взять товары у которых есть все какие-то несколько цветов и не брать те у которых есть хотя бы один из них.
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    сделать выборку id тех, у которых есть цвет, который тебе не нравится, из тех которые подходят

    шаг второй - выбрать тех у кого есть тот цвет или те цвета которые нужны, но `id` NOT IN (тут айдишники с плохим цветом)

    кажется так
     
  3. Gom3r

    Gom3r Активный пользователь

    С нами с:
    9 июл 2009
    Сообщения:
    7
    Симпатии:
    0
    я, скорее всего, неверно выразился. допустим дамп
    Код (Text):
    1. ...
    2. (4, '34e3e5'),
    3. (5, '205260'),
    4. (5, '33151a'),
    5. (5, '34e3e5'),
    6. (5, '46008c'),
    7. (6, '46008c'),
    8. ...
    когда я выбрал '46008c' и '34e3e5' чтоб выходил айди только 5, так как только в 5 есть эти оба цвета. ну и если где-то еще есть, чтоб они тоже естественно выходили.
     
  4. Крыс

    Крыс Активный пользователь

    С нами с:
    3 фев 2012
    Сообщения:
    449
    Симпатии:
    0
    SELECT *, sum(1) as k FROM `product_color` WHERE `color`= '46008c' or `color` = '34e3e5' group by `productId` having k=2

    правда для корректной работы тогда нужно обеспечить уникальность по этим 2-м полям, но это как минимум логично
    Код (Text):
    1. ALTERTABLE`product_color`ADDUNIQUE (
    2.  `productId` ,
    3.  `color`
    4. );
    иначе придется возится со вложенным запросом и distinct-ом, к тому же тяжелый запрос получится, неэффективный