Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Фильтр по динамическим параметрам, 1:N селект с мульти условиями 
:(
    Опции темы
yukodev
Дата 29.6.2012, 09:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 29.6.2012

Репутация: нет
Всего: нет



Здравствуйте. Помогите составить запрос с несколи связаных таблиц.
1)Таблица Products обычная таблица с набором полей id,name,price,articul...............
2)Связанные таблицы - динамические параметры - 
user posted image
 Для запроса хватает использовать только products и products_parameters (product_id, parameters_value_id)
Динамические параметры отображаются набором чекбоксво.
Суть задачи - если отмечено некое количество галочек то запрос должен вернуть все продукты которые имеют эти параметры (and not or)

Простое решение это выбрать все продукты и в цикле проверять имеет ли каждый продукт набор выбранных параметров если нет то выключать из списка результатов.  Ориентироваться на 100-200 тысяч товаров.
 Помогите плз составить правильный запрос с минимальной нагрузкой на сервак
PM MAIL   Вверх
Zloxa
Дата 29.6.2012, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 33
Всего: 161



Определяемые пользователем атрибуты отображать в табличном виде - не адекватно дорого. 
Такая практика имеет очень узкую область применения

Код

select products.*
   ,p1.value p1
   ,p2.value p2
...
  ,pN.value pN
from products
left join param_vals p1 on p1.praram_id = 1 and p1.proudct_id = products.id
left join param_vals p2 on p2.praram_id = 2 and p2.proudct_id = products.id
...
left join parameter pN on pN.praram_id = N and pN.proudct_id = products.id




--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
yukodev
Дата 29.6.2012, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 29.6.2012

Репутация: нет
Всего: нет



Zloxa,  Можно расписать логику запроса? (в подобных запросах плохо разбираюсь)
PM MAIL   Вверх
yukodev
Дата 30.6.2012, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 29.6.2012

Репутация: нет
Всего: нет



Вроде получилось, пример запроса(выбрано два параметра под id 160,161):

Код

SELECT `products`.* FROM `products` 
LEFT JOIN `products_parameters`
 ON (`products_parameters`.`product_id` = `products`.`id`) 
WHERE `watch` = 1  
AND `products_parameters`.`parameters_value_id` in (160,161) 
GROUP BY `products`.`id` 
HAVING COUNT(*) = 2 ORDER BY `products`.`order` DESC (1)


Это сообщение отредактировал(а) yukodev - 30.6.2012, 13:13
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0395 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.