Как сделать выборку товаров с параметрами?

Имеем две таблицы, одна с объявлениями, другая с параметрами. Вопрос как сделать выборку по одному или нескольким параметрам. Вот тут попытался расписать максимально

CREATE TABLE `board` (
  `id` mediumint(7) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID Объявления',
  `name` varchar(250) NOT NULL COMMENT 'Название Объявления',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM;

INSERT INTO `board` VALUES
(100, 'Продам Daewoo'),
(101, 'Продам Kia'),
(102, 'Продам Ford');

CREATE TABLE `options` (
  `item_id` mediumint(7) unsigned NOT NULL COMMENT 'ID Объявления',
  `option_id` varchar(200) NOT NULL COMMENT 'Название параметра',
  `value` varchar(200) NOT NULL COMMENT 'Значение параметра',
  KEY `item_id` (`item_id`)
) ENGINE=MyISAM;

INSERT INTO `options` VALUES
(100, 'model', 'Lanos'),
(100, 'color', 'Бежевый'),
(100, 'cond', 'Новый'),
(101, 'model', 'Rio'),
(101, 'color', 'Синий'),
(101, 'cond', 'Б/у'),
(102, 'model', 'Transit'),
(102, 'cond', 'Новый');

Имеем две таблицы, одна с объявлениями, другая с параметрами. В таблице options может быть много опций, т.е. записей с одинаковыми item_id. Нужно составить запрос чтобы можно было сделать выборку с учетом параметов Мне подсказали что это называется "реляционное деление", но как реализовать, не пойму.

Задача, сделать легкие нересурсоемкие качественные запросы

  1. Получить вывод всех трех объявлений такого вида (БЕЗ УСЛОВИЙ):

     SELECT b.id,b.name,o.(параметр_model),o.(параметр_color) FROM board as b
     LEFT JOIN options as o ON o.item_id = b.id
    

    должно получится что то вроде:

     '100'  'Продам Daewoo'  'Lanos'    'Бежевый'
     '101'  'Продам Kia'     'Rio'      'Синий'
     '102'  'Продам Ford'    'Transit'  ''
    
  2. Получить вывод объявлений (С УСЛОВИЯМИ):

     SELECT b.id,b.name,o.(параметр_model),o.(параметр_color) FROM board as b
     LEFT JOIN options as o ON o.item_id = b.id
     WHERE o.(параметр_model) = 'Lanos' && o.(параметр_color) = 'Бежевый'
    

    должно получится что то вроде:

     '100'  'Продам Daewoo'  'Lanos'    'Бежевый'
    

Варианты которые я пробовал

SELECT b.id,b.name FROM board as b
LEFT JOIN options as o ON o.item_id = b.id
GROUP BY b.id;

SELECT b.id,b.name FROM board as b
LEFT JOIN options as o ON o.item_id = b.id
WHERE (o.option_id,o.value) IN (('model','Lanos'),('cond','Новый'))
GROUP BY b.id;

sqlfiddle.com/#!9/245ed3/21


Ответы (0 шт):