Agent
Новичок
Товарный каталог, структура БД, подбор по параметрам
Добрый день, пытаюсь создать товарный каталог, подумал над структорой, сделал такую:
# Обзор goods_items - общие данные о товаре (модель, брэнд, картинка и тд.)
# Обзор goods_param_names - названия параметров:
id - номер параметра
cat_id - номер категории (утюги, фены ...)
type - тип параметра, числовой или нет
# Обзор goods_param_values - значения не числовых параметров
id - номер значения параметра
par_id - номер параметра
value - само значение (допустим тип загрузки - верхний)
# Обзор goods_param_sync - таблица для связи параметров
good_id - номер товара
cat_id - номер категории
par_id - номер параметра
value - значение или номер значения параметра (для не числовых параметров)
Собственно все очень даже не плохо работает, пока не каснешься подбора по параметрам, пробовал 2 запроса
при малом кол-ве параметров поиска, работает, при большом просто вешает мускул.
и второй
Работает, но очень медленно, на данный момент в таблице `goods_param_sync` порядка 500 тыс. параметров.
потому возник вопрос, как иначе можно организовать хранение данных, или как иначе при существующей структуре организовать подбор по параметрам? Может где в запросах лоханулся или в структуре в целом, буду очень благодарен за любую помощь.
Добрый день, пытаюсь создать товарный каталог, подумал над структорой, сделал такую:
# Обзор goods_items - общие данные о товаре (модель, брэнд, картинка и тд.)
# Обзор goods_param_names - названия параметров:
id - номер параметра
cat_id - номер категории (утюги, фены ...)
type - тип параметра, числовой или нет
# Обзор goods_param_values - значения не числовых параметров
id - номер значения параметра
par_id - номер параметра
value - само значение (допустим тип загрузки - верхний)
# Обзор goods_param_sync - таблица для связи параметров
good_id - номер товара
cat_id - номер категории
par_id - номер параметра
value - значение или номер значения параметра (для не числовых параметров)
Собственно все очень даже не плохо работает, пока не каснешься подбора по параметрам, пробовал 2 запроса
Код:
SELECT good_id
FROM `goods_param_sync` AS p
INNER JOIN `goods_param_sync` AS p1 ON p.good_id = p1.good_id
INNER JOIN `goods_param_sync` AS p2 ON p.good_id = p2.good_id
....
INNER JOIN `goods_param_sync` AS p16 ON p.good_id = p16.good_id
INNER JOIN `goods_param_sync` AS p17 ON p.good_id = p17.good_id
WHERE (p.`par_id` = 100 AND p.`value` =121)
AND (p1.`par_id`=130 AND p1.`value` != 0)
AND (p2.`par_id`=205 AND p2.`value` != 0)
AND (p3.`par_id`=152 AND p3.`value` != 0)
AND (p4.`par_id`=173 AND p4.`value` != 0)
....
AND (p17.`par_id`=164 AND p17.`value` != 0);
и второй
Код:
SELECT good_id
FROM `goods_param_sync`
WHERE (`par_id` =100 AND `value` =121)
OR (`par_id`=130 AND `value` != 0)
OR (`par_id`=205 AND `value` != 0)
OR (`par_id`=152 AND `value` != 0)
....
OR (`par_id`=171 AND `value` != 0)
OR (`par_id`=169 AND `value` != 0)
OR (`par_id`=164 AND `value` != 0)
GROUP BY `good_id`
HAVING count( `good_id` ) = 17;
потому возник вопрос, как иначе можно организовать хранение данных, или как иначе при существующей структуре организовать подбор по параметрам? Может где в запросах лоханулся или в структуре в целом, буду очень благодарен за любую помощь.