BreeZ
Новичок
Помогите с запросами для фильтра
Приветствую,
Необходимо составить БЫСТРЫЙ запрос для фильтра. Юзер выбирает определённые значения у определённых параметров и ему должны выдаться товары у которых эти вот параметры равны соответствующим значениям.
Есть у меня таблица tovar_atrib с такой структурой:
tovar_id int(11)
atrib_id int(11)
value_id int(11)
Мне нужно получить такие tovar_id у которых несколько атрибутов имеют определённые значения, то есть предположим мне нужен товар у которого атрибут 1 имеет значение 10, атрибут 2 имеет значение 5, атрибут 4 имеет значение 20. То есть должен быть запрос который извлечёт такие товары у которых есть записи такого вида:
tovar_id | atrib_id | value_id
id товара | 1 | 10
id товара | 2 | 5
id товара | 4 | 20
Надеюсь понятно объяснил
Пытался сделать через INNER JOIN таким способом
SELECT DISTINCT t1.tovar_id from tovar_atrib t1 INNER JOIN tovar_atrib t2 ON (t1.tovar_id = t2.tovar_id AND t2.atrib_id = 1 AND t2.value_id = 10) INNER JOIN tovar_atrib t3 ON (t1.tovar_id = t3.tovar_id AND t3.atrib_id = 2 AND t3.value_id = 5) INNER JOIN tovar_atrib t4 ON (t1.tovar_id = t4.tovar_id AND t4.atrib_id = 4 AND t4.value_id = 20)
Пытался также и вот так
SELECT DISTINCT t1.tovar_id from tovar_atrib t1 where t1.id IN (SELECT tovar_id from tovar_atrib where atrib_id = 1 AND value_id = 10)....
Дело усложняется ещё и тем, что на странице с фильтром рядом с каждым значением должен быть подсчёт товаров, у которых этот параметр равен этому значению... Ну, в общем, вот сайт http://shoprate.ru/cat18.html. Американские аналоги это http://shopzilla.com, http://shopping.yahoo.com и т.д.
Получается время генерации страницы чуть ли не две секунды
Может надо менять структуру базы?
Приветствую,
Необходимо составить БЫСТРЫЙ запрос для фильтра. Юзер выбирает определённые значения у определённых параметров и ему должны выдаться товары у которых эти вот параметры равны соответствующим значениям.
Есть у меня таблица tovar_atrib с такой структурой:
tovar_id int(11)
atrib_id int(11)
value_id int(11)
Мне нужно получить такие tovar_id у которых несколько атрибутов имеют определённые значения, то есть предположим мне нужен товар у которого атрибут 1 имеет значение 10, атрибут 2 имеет значение 5, атрибут 4 имеет значение 20. То есть должен быть запрос который извлечёт такие товары у которых есть записи такого вида:
tovar_id | atrib_id | value_id
id товара | 1 | 10
id товара | 2 | 5
id товара | 4 | 20
Надеюсь понятно объяснил
Пытался сделать через INNER JOIN таким способом
SELECT DISTINCT t1.tovar_id from tovar_atrib t1 INNER JOIN tovar_atrib t2 ON (t1.tovar_id = t2.tovar_id AND t2.atrib_id = 1 AND t2.value_id = 10) INNER JOIN tovar_atrib t3 ON (t1.tovar_id = t3.tovar_id AND t3.atrib_id = 2 AND t3.value_id = 5) INNER JOIN tovar_atrib t4 ON (t1.tovar_id = t4.tovar_id AND t4.atrib_id = 4 AND t4.value_id = 20)
Пытался также и вот так
SELECT DISTINCT t1.tovar_id from tovar_atrib t1 where t1.id IN (SELECT tovar_id from tovar_atrib where atrib_id = 1 AND value_id = 10)....
Дело усложняется ещё и тем, что на странице с фильтром рядом с каждым значением должен быть подсчёт товаров, у которых этот параметр равен этому значению... Ну, в общем, вот сайт http://shoprate.ru/cat18.html. Американские аналоги это http://shopzilla.com, http://shopping.yahoo.com и т.д.
Получается время генерации страницы чуть ли не две секунды

Может надо менять структуру базы?