djamali
@djamali
web developer

Как правильно составить sql запрос?

У меня имеется четыре таблицы:
Таблица с товарами:
CREATE TABLE `oc_product` (
  `product_id` int(11) NOT NULL,
  `status` tinyint(1) NOT NULL DEFAULT '0'
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

Таблица связки товаров и категорий:
CREATE TABLE `oc_product_to_category` (
  `product_id` int(11) NOT NULL,
  `category_id` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

Таблица связки товаров с фильтрами:
CREATE TABLE `oc_product_filter` (
  `product_id` int(11) NOT NULL,
  `filter_id` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

Таблица содержащая данные фильтров:
CREATE TABLE `oc_filter_description` (
  `filter_id` int(11) NOT NULL,
  `filter_group_id` int(11) NOT NULL,
  `name` varchar(64) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

В таблице `product_id` содержится бесконечное множество ID товаров.
В таблице `oc_product_to_category` происходит связка ID товара с ID категорий товаров. Любой ID товара может быть привязан к бесконечному множеству ID категорий.
В таблице `oc_product_filter` происходит связка ID товара с ID фильтра. Данная система нужна для создания системы -Поиск по параметрам.
В таблице `oc_filter_description` содержится подробная информация всех существующих фильтров на сайте. (ID фильтра, ID группы фильтра и Название фильтра).

На сайте имеется 1 фильтр «Цвет».
Данный фильтр представляет собой группу фильтров `filter_group_id` = 1 из таблицы `oc_filter`.
К данной группе может относиться бесконечное множество фильтров из таблицы `oc_product_filter`, которые символизируют цвета.
Например:
Цвет – Черный (`filter_id` = 1, `filter_group_id` = 1, `name` = ‘Черный’);
Цвет – Белый (`filter_id` = 2, `filter_group_id` = 1, `name` = ‘Белый);
Цвет – Красный (`filter_id` = 3, `filter_group_id` = 1, `name` = ‘Красный);
Как составить запрос который на выходе покажет все возможные цвета из
фильтра группы #1 `filter_group_id` = 1,
которые относятся к товарам привязанным к `category_id` = 1,
со статусом товара `status` = 1.
Уже день мучаюсь((
  • Вопрос задан
  • 43 просмотра
Решения вопроса 1
по идее, должно быть так:
SELECT `fd`.* FROM `oc_filter_description` AS `fd`
INNER JOIN `oc_product_filter` AS `pf` USING(`filter_id`)
INNER JOIN `oc_product` AS `p` USING(`product_id`)
INNER JOIN `oc_product_to_category` AS `p2c` USING(`product_id`)

WHERE `fd`.`filter_group_id` = 1
AND `p2c`.`category_id` = 1
AND `p`.`status`=1
GROUP BY `fd`.`filter_id`
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы