Доброго времени суток.
Никак не могу понять, как происходит отсеивание в Я.М.
К примеру
http://market.yandex.ru/guru.xml?CMD=-RR=9,0,0,0-VIS=70-CAT_ID=160043-EXC=1-PG=10&hid=91491
В правой колонке выбираю "Тип" и жму "смартфон/коммуникатор"
Мне вернуло 392 товара
Далее, там же выбираю "Тип" "телефон"
и мне вернуло 908 товаров.
Т.е. в параметре "Тип" все его значения суммируются.
Но если я выберу "Тип корпуса" -> "классический", то мне вернет 775 товаров.
Т.е. он отсеял товары, которые не совпали.
Но при этом, если я выберу еще "Тип корпуса" -> "раскладушка", то вернет 815 товаров.
Получается так, что параметры суммируют значения друг-друга, но отсеивают среди других.
У меня сейчас выборка только по самим значениям. Т.е. не по "Тип", а по "телефон"
Условие запроса собираю в начале в массив (это если есть $vals)
foreach($vals AS $k => $v)
{
$add[] = " p.pi IN (
SELECT params_pi FROM products_params WHERE param_pi = p.pi AND param_vals = '".(int)$v."'
) ";
}
p.pi - это ID товаров
params_pi - это ID товаров которые связаны с значениями параметров.
И так при каждом выборе значения, например "Тип корпуса" -> "классический" + "раскладушка"....
ID самих параметров я не использую, так как не нужно было. Но сейчас понял, что без них никак.
И вот никак не могу понять как фильтровать так же как на маркете.
Мне помогли немного и написали кода
http://pastie.org/4907145
Пробовал делать, в итоге видимо запрос не правильный.
Пример
http://sqlfiddle.com/#!2/0e3f7/3
Помогите поправить запрос пожалуйста. Уже не много дней пытаюсь понять как сделать.