SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 28.10.2012 19:20:58

dropoff
Участник
Зарегистрирован: 28.10.2012
Сообщений: 2

Помогите правильно сформировать запрос

Доброго времени суток.

Никак не могу понять, как происходит отсеивание в Я.М.
К примеру http://market.yandex.ru/guru.xml?CMD=-R … ;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
Помогите поправить запрос пожалуйста. Уже много дней пытаюсь понять как сделать.

Неактивен

 

#2 28.10.2012 20:53:47

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Помогите правильно сформировать запрос

Вы пытаетесь выбрать из products_params такую строчку, что
(params_group = '3' AND params_value = '3') AND (params_group = '1' AND params_value = '2')
Естественно результат будет нулевой. Нужно делать группировку.

Посмотрите, например, http://sqlinfo.ru/forum/viewtopic.php?id=5324

Неактивен

 

#3 29.10.2012 09:20:51

dropoff
Участник
Зарегистрирован: 28.10.2012
Сообщений: 2

Re: Помогите правильно сформировать запрос

Спасибо.

Есть вопрос.
Там написано, например тут

select id_1 from `связи` t1 join
(select id_2 from `теги` where name in ($mass)) t2 on t1.id_2=t2.id_2 group by t1.id_1 having count(*)=N

где N - количество выбранных тегов, т.е. количество элементов в массиве $mass


Т.е. в N должно падать количество пришедших в массиве params_value ? Не params_group, а именно params_value?

Неактивен

 

#4 29.10.2012 11:05:39

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Помогите правильно сформировать запрос

N это кол-во условий, которые вы накладываете на products_params, т.е. комбинаций (params_group,params_value) в вашем случае.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson