Как сделать выборку товаров с параметрами?
Имеем две таблицы, одна с объявлениями, другая с параметрами. Вопрос как сделать выборку по одному или нескольким параметрам. Вот тут попытался расписать максимально
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. Нужно составить запрос чтобы можно было сделать выборку с учетом параметов Мне подсказали что это называется "реляционное деление", но как реализовать, не пойму.
Задача, сделать легкие нересурсоемкие качественные запросы
Получить вывод всех трех объявлений такого вида (БЕЗ УСЛОВИЙ):
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' ''Получить вывод объявлений (С УСЛОВИЯМИ):
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;