Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
Здравствуйте.
Структура таблиц фильтров товаров:
Фильтрация работает так, что после выбора значения параметра фильтр показывает только те варианты которые есть у набора отфильтрованных товаров.
Например набор фильтров:
Параметр1
-опция1_1
-опция1_2
-опция1_3
Параметр2
-опция2_1
-опция2_2
-опция2_3
Выбираем опция1_1. После фильтрации остается
Параметр1
-опция1_1
Параметр2
-опция2_1
-опция2_2
Тоесть получаем набор фильтров которые есть только у набора отфильтрованных товаров. Это жесткая фильтрация, которая упускает опции при выборе которых мы получим еще результаты -опция1_2 и -опция1_3 должна остаться в фильтрах так как они добавят товаров
Вот пример запроса выборки актуальных опций:
Отредактированно yuko (21.11.2013 23:27:40)
Неактивен
Не очень понятно. Приведите набор тестовых данных в виде create table.. и insert into
и поясните задачу на примере этих данных, т.е. исходная величина такая-то, запрос должен сделать то-то и то-то и получиться вот такой вот результат.
Неактивен
Данные:
Неактивен
Ещё менее понятно стало, например, почему "опция_2_3" выпадает, а другие нет.
Есть продукты, у каждого продукта есть набор параметров, каждый параметр может принимать значение из фиксированного набора.
Вы хотите найти - вот тут словами, что вы хотите найти, без запроса.
Неактивен
"опция_2_3" выпадает потому, что выбрав комбинацию опция_1_1 параметра1 и опция_2_3 параметра2 мы полуим 0 товаров.
Запро вернет пустой результат:
Отредактированно yuko (22.11.2013 13:27:09)
Неактивен
кросс-пост: http://forum.vingrad.ru/forum/topic-373421.html
Неактивен
yuko написал:
"опция_2_3" выпадает потому, что выбрав комбинацию опция_1_1 параметра1 и опция_2_3 параметра2 мы полуим 0 товаров.
Т.е. вы хотите выбрать те опции, которые в сочетании с выбранной "опция_1_1" вернут ненулевое число товаров. Но тогда почему должна быть добавлена "опция_1_2" в результат. Ведь в комбинации с "опция_1_1" будет 0 товаров на представленных тестовых данных?
Неактивен
vasya написал:
yuko написал:
"опция_2_3" выпадает потому, что выбрав комбинацию опция_1_1 параметра1 и опция_2_3 параметра2 мы полуим 0 товаров.
Т.е. вы хотите выбрать те опции, которые в сочетании с выбранной "опция_1_1" вернут ненулевое число товаров. Но тогда почему должна быть добавлена "опция_1_2" в результат. Ведь в комбинации с "опция_1_1" будет 0 товаров на представленных тестовых данных?
Нет результат не вернет 0 а наоборот добавит товаров, опция _1_1 и 1_2 это опций одного параметра и они обрабатываются одним подзапросом exists как равносильные - конструкция or или in() - будут отобраны товары с опциями или опция _1_1 или опция _1_2 (каждый набор параметров в виде чекбоксов):
Отредактированно yuko (22.11.2013 14:06:02)
Неактивен
Дано: "опция_1_1"
Нужно выбрать все опции других параметров, которые в сочетании с "опция_1_1" дают отличное от нуля кол-во товаров + все опции того параметра к которому относится "опция_1_1"
Так?
Неактивен
vasya написал:
Дано: "опция_1_1"
Нужно выбрать все опции других параметров, которые в сочетании с "опция_1_1" дают отличное от нуля кол-во товаров + все опции того параметра к которому относится "опция_1_1"
Так?
Да НО, не факт что 'все опции того параметра к которому относится "опция_1_1"', потому что в следующем наборе параметров можно выбрать опции которые также могут "заблокируют" часть опций первого параметра.
Выбрав только одну опцию должно быть как Вы написали:
Нужно выбрать все опции других параметров, которые в сочетании с "опция_1_1" дают отличное от нуля кол-во товаров + все опции того параметра к которому относится "опция_1_1"
Но если уже выбирать дальше опции других параметров, то эти опции могут отсеять часть опций предыдущего параметров
Отредактированно yuko (22.11.2013 14:12:19)
Неактивен
Это как? После выбора "опция_1_1" у остальных параметров доступны только те опции, которые сочетаются с "опция_1_1" или нет?
Давайте так:
1) Фиксируем опцию одного параметра, например "опция_1_1", тогда мы должны выбрать те опции, которые ...
2) Фиксируем два параметра, например, "опция_1_1" + ..., тогда выбираем ...
Неактивен
Правильно ли я понимаю, что если мы фиксируем 2 опции двух параметров, то должны выбрать те опции других параметров, которые в сочетании с 1 и 2 дают отличное от нуля кол-во товаров, а из опций параметров 1 и 2 остаются только выбранные ?
Неактивен
Вот запрос для одной опции:
Неактивен
vasya написал:
Это как? После выбора "опция_1_1" у остальных параметров доступны только те опции, которые сочетаются с "опция_1_1" или нет?
Давайте так:
1) Фиксируем опцию одного параметра, например "опция_1_1", тогда мы должны выбрать те опции, которые ...
2) Фиксируем два параметра, например, "опция_1_1" + ..., тогда выбираем ...
1) Фиксируем опцию одного параметра, например "опция_1_1", тогда мы должны выбрать те опции, которые сочитаются с опция_1_1 других параметров а также все остальные опции первого параметра (которому пренадлежит опция_1_1)
2)Фиксируем два параметра, например, "опция_1_1" + "опция_2_1" (при этом опция_2_1 доступна для выбора так как она сочитается с опция_1_1 также незабываем что это опции разных параметров) тогда мы должны выбрать опции которые сочитаются с опция_1_1 первого параметра и опция_2_1 второго параметра а также остальные опции второго параметра которые сочитаются с опция_1_1 первого параметра
3) Фиксируем 2 опции 1-го параметра опция_1_1(230 товаров), опция_1_2 (120 товаров) получаем 350 товаров(для примера). Дальше во втором параметре нам допустимы опции которые сочитаются и с опция_1_1 и с опция_1_2. Например опция_2_1 сочитается с опция_1_1 а опция_2_2 сочитается с опцией_1_2. и Если наш следующий выбор будет опция_2_1 то все товары опции_1_2 не покажутся а сама опция станет неактивной(заблокированной) но будет отмечена(на результат не повлеяет но если мы решим еще выбрать опция_2_2 то она опция_1_2 разблокируется)
Пример для понимания логики:
_http://filter.kombox.ru/tv/
Параметр частота обновления выбираем 200 и 400 Гц.
Дальше параметр Формат телевизора выбираем 21:9 - 400Гц заблокировалась. Дальше добавляем Формат 16:9 - 400Гц разблокировалась.
Вот такая логика зависимости.
Неактивен
Вопрос возможно глупый:
Неактивен
Для двух и более параметров:
Неактивен
yuko написал:
Вопрос возможно глупый:
SELECT DISTINCT parameters_value_id FROM `products_parameters` WHERE product_id IN
(SELECT product_id FROM `products_parameters` WHERE parameters_value_id=
(SELECT id FROM `parameters_values` WHERE `value`='опция_1_1'))
UNION
SELECT id FROM `parameters_values` WHERE parameter_id IN
(SELECT parameter_id FROM `parameters_values` WHERE `value`='опция_1_1')
А почему в выборке использубются названия атрибутов а не их ID? Разница явно есть потому что я пробовал ставить вместо названи - id (`value`='опция_1_1' => `id`=1) и у меня зависал запрос намертво - вот тут менял:
(SELECT parameter_id FROM `parameters_values` WHERE `value`='опция_1_1')
Можете заменить
WHERE parameters_value_id=
(SELECT id FROM `parameters_values` WHERE `value`='опция_1_1')
на
WHERE parameters_value_id=1
Использовал название, так как по условию задачи было дано "опция_1_1".
Неактивен
Отредактированно yuko (22.11.2013 16:29:57)
Неактивен
yuko написал:
2)Фиксируем два параметра, например, "опция_1_1" + "опция_2_1" (при этом опция_2_1 доступна для выбора так как она сочитается с опция_1_1 также незабываем что это опции разных параметров) тогда мы должны выбрать опции которые сочитаются с опция_1_1 первого параметра и опция_2_1 второго параметра а также остальные опции второго параметра которые сочитаются с опция_1_1 первого параметра
Неактивен
Конкретно для второго параметра работает.
Нужно динамически это сделать чтоб для любого количество параметров работало. Запрос не доконца понял там если больше двух параметров то union-ы нужно добавлять или union один и в нем нужно ковырять?
Поток входящих опций
Отредактированно yuko (23.11.2013 11:58:15)
Неактивен
Для N параметров:
-- добавляем остальные опции N-го параметра, которые сочитаются с опциями первых N-1 параметров
select distinct parameters_value_id from `products_parameters` where product_id in
(select product_id from `products_parameters` where parameters_value_id in (id опций первых N-1 параметров))
and parameter_id=N;
Неактивен
Страниц: 1