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

Поиск:

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


Опытный
**


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

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



Котелок вообще не варит  smile 

есть таблица с товарами gds (для визуализации)

 id | name
--------------
 1  | Toshiba AC100-117
 2  | Acer Aspire One 
 3  | ASUS Eee

есть таблица с товарами filters (для визуализации)

 id | name
--------------
 1  | Toshiba
 2  | Acer
 3  | ASUS
.... | 

есть таблица gds_filters :
gds_id - товар изg ds
filter_id  - из filters

id   |    gds_id |    filter_id 
 1   |    1       |    1
 2   |    2       |    2
 3   |    3       |    3
 15 |    3       |    15
 14 |    2       |    17
 13 |    1       |    15

Мне нужно посчитать количество товаров по каждому фильтру.
Фильтры группированные, тоесть filter_id = 1,2,3 из одной группы, filter_id = 15,16,17 -  из другой

К примеру пришел фильтр (filter_id = 1) 
было

filter_id = 1 (1)
filter_id = 2 (1)
filter_id = 3 (1)

filter_id =15 (2)
filter_id =16 (0)
filter_id =17 (1)

должно посчитать

filter_id = 1 (1)
filter_id = 2 (1)
filter_id = 3 (1)

filter_id =15 (1)
filter_id =16 (0)
filter_id =17 (0)

Тоесть не смотря на то что filter_id = 1, в filter_id = 2, 3 количество остается таким же, т.к. они находятся в одной группе а вот filter_id = 15, 17 уменьшается.

распределение по группам уже готово, тоесть если пришли фильтры 1,2,17 то распределяется так (1,2) и (17)
PM MAIL Skype   Вверх
CruorVult
Дата 26.5.2011, 09:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



ну что, предложений нету? 
а то вытаскивать всё скриптом пару тыщ записей и обрабатывать скриптом не оч...
PM MAIL Skype   Вверх
CruorVult
Дата 26.5.2011, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



вот придумал такое, если пришли фильтры 1 и 17
Код

SELECT count(*) as cnt, gf.filter_id  FROM gds_filters as gf
LEFT JOIN gds_filters AS gf1 ON gf1.gds_id = gf.gds_id
LEFT JOIN gds_filters AS gf2 ON gf2.gds_id = gf.gds_id
where 
(
    gf.filter_id in(1,2,3)  and 
    gf1.filter_id in (1,2,3) and 
    gf2.filter_id in(17)
) OR (
    gf.filter_id in(15,17,18) and 
    gf1.filter_id in(1) and 
    gf2.filter_id in(15,17,18)
)
group by gf.filter_id 


Это сообщение отредактировал(а) CruorVult - 27.5.2011, 12:51
PM MAIL Skype   Вверх
CruorVult
Дата 27.5.2011, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



в вышеуказаном варианте работает не очень быстро....
когда в таблице gds_filters 35к записей то запрос выполняется 0.2-1.5 сек

Что никто раньше с фильтрами не сталкивался?

такое чувство что я общаюсь сам с собой smile  
PM MAIL Skype   Вверх
patap
Дата 27.5.2011, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 893
Регистрация: 7.5.2005
Где: Украина, Зп

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



здается мне, что народ не может въехать, что такое группы и зачем оно, по крайней мере я ничего не понял: что там группируется, зачем, какие-то абстрактные группы, зачем их учитывать в запросе, ну и т.д.

чем не устроит такой запрос?
Код

SELECT filter_id, COUNT(*) FROM gds_filters WHERE filter_id IN (1,2,17) GROUP BY filter_id


Добавлено через 1 минуту и 35 секунд
пришло 3 фильтра с ид равными: 1, 2 и 17
взяли и посчитали сколько товаров относится к каждому из фильтров.

или я недогоняю что к чему ))


--------------------
На боку кобура болталась, сзади шашка отцовская звякала. 
Впереди меня все хохотало, а позади все плакало (с)
PM MAIL ICQ   Вверх
CruorVult
Дата 27.5.2011, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Есть у нас группа "Производитель":

Производитель (filter_id=1, filter_id=2, filter_id=3)
    ASUS (1) (filter_id=1)
    Acer (1) (filter_id=2)
    Toshiba (1) (filter_id=3)

есть группа "Тип"

Тип (filter_id=15, filter_id=17, filter_id=18)
   Tablet PC (0) (filter_id=18)
   Нетбук (2) (filter_id=15)
   Ноутбук (1) (filter_id=17)

К примеру пришел фильтр (filter_id = 1) и посчитало так:

Производитель 
    ASUS (1) (filter_id=1)
    Acer (1) (filter_id=2)
    Toshiba (1) (filter_id=3)
 

Тип
   Tablet PC (0) (filter_id=18)
   Нетбук (1) (filter_id=15)
   Ноутбук (0) (filter_id=17)

Его имеет только товар "ASUS Eee", значит посчитало 1. На остальные фильтры из этой группы пришедший фильтр не влияеет т.к. они находится в одной группе. 
С другими же группами происходит обыный подсчет. Фильтр "Нетбук" имеет 2 товара: ASUS Eee и Toshiba AC100-117. Но т.к. нам нужны товары только с фильтром "ASUS", то соответственно посчитало (1).

Это сообщение отредактировал(а) CruorVult - 30.5.2011, 11:30
PM MAIL Skype   Вверх
CruorVult
Дата 30.5.2011, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Можно тему отзеркалить в разделе Базы Данных -> MySQL. Может так кто-то поможет.
PM MAIL Skype   Вверх
CruorVult
Дата 1.6.2011, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Сделал...
всем ГРОМНОЕ СПАСИБО! За идеи, за подсказки! Без ВАС бы не получилось smile 
PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




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


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

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