Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск по нескольким фильтрам 
V
    Опции темы
CruorVult
Дата 3.2.2011, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 868
Регистрация: 24.9.2008
Где: г.Киев, Украина

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



Всем привет!
Не могу правильно составить запрос, что-то голова совсем не варит.
Есть две таблицы:
cv_catalog_properties - свойства товаров
cv_catalog_property_filters - фильтры по свойствам товаров

user posted image

Мне нужно выбрать cv_catalog_properties.catalog_id для которых фильтры cv_catalog_property_filters.g_p_filter_id соответствую нужному значинию.
К примеру нужно выбрать товары по фильтрам  41,33(g_p_filter_id ). Соответственно наш товар catalog_id=16

Следующий запрос нам не подходит:
Код

SELECT catalog_id 
       FROM cv_catalog_properties as cp, cv_catalog_property_filters as cpf 
    WHERE cp.id=cpf.c_p_id AND cpf.g_p_filter_id in (44,33)
GROUP BY catalog_id"


т.к. выбирается хотяб одно соответствие 41 или 33, а нам нужно 41 и 33
PM MAIL Skype   Вверх
ksnk
Дата 3.2.2011, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

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



по приведенному запросу и таблицам ни один товар не может одновременно иметь фильтры 44 и 33.
Можно объяснить задачу на более бытовом уровне?


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
CruorVult
Дата 3.2.2011, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 868
Регистрация: 24.9.2008
Где: г.Киев, Украина

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



Цитата(ksnk @  3.2.2011,  12:33 Найти цитируемый пост)
ни один товар не может одновременно иметь фильтры 44 и 33

не товар а свойтва
есть товар с  id=16. он имеет 3 свойства(cv_catalog_properties - красным). мне нужно выбрать этот товар или нет. тоесть нужно пройтись по всем его свойствам и узнать имеют ли они фильтры 41 и 33

Вот этот запрос:
Код

SELECT cp.catalog_id, cpf.g_p_filter_id FROM cv_catalog_properties as cp,cv_catalog_property_filters as cpf 
WHERE cp.id=cpf.c_p_id AND cpf.g_p_filter_id in (41,33)

выдает:
Array
(
    [0] => Array
        (
            [catalog_id] => 16
            [g_p_filter_id] => 41
        )

    [1] => Array
        (
            [catalog_id] => 16
            [g_p_filter_id] => 33
        )

    [2] => Array
        (
            [catalog_id] => 18
            [g_p_filter_id] => 33
        )

)

По вышеупомянутым фильтрам находит все свойства товаров.  [catalog_id] => 18 - нужно убрать, т.к. у него совпадает только одно свойство. 
Можно конечно скриптом обработать, но есть еще часть запроса и разбивать на 2 не хочется.

Это сообщение отредактировал(а) CruorVult - 3.2.2011, 13:05
PM MAIL Skype   Вверх
ksnk
Дата 3.2.2011, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

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



Код

SELECT cv_catalog_properties.catalog_id
FROM ((cv_catalog_properties INNER JOIN cv_catalog_properties AS cv_catalog_properties_1 
  ON cv_catalog_properties.catalog_id = cv_catalog_properties_1.catalog_id)
LEFT JOIN cv_catalog_property_filters ON cv_catalog_properties.id = cv_catalog_property_filters.c_p_id) 
LEFT JOIN cv_catalog_property_filters AS cv_catalog_property_filters_1 
  ON cv_catalog_properties_1.id = cv_catalog_property_filters_1.c_p_id
WHERE (((cv_catalog_property_filters.g_p_filter_id)=33) AND ((cv_catalog_property_filters_1.g_p_filter_id)=41));



запрос из конструктора запросов MSAccess, так что ногами за скобки не бить ;)

Основной смысл - нужно объединьть по catalod_id 2 таблицы с пропертями и получить все возможные комбинации пропертей. Их уже и фильтровать

Это сообщение отредактировал(а) ksnk - 3.2.2011, 16:18


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
CruorVult
Дата 4.2.2011, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 868
Регистрация: 24.9.2008
Где: г.Киев, Украина

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



Жесть smile 
Но как не странно работает smile 
А как на счет производительности? может всётаки лучше разбить на 2 запроса.
Ну в любом случае спасибо smile 
 
PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




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


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

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