| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Базы Данных > Подсчет фильтров |
| Автор: CruorVult 25.5.2011, 13:13 |
| Котелок вообще не варит есть таблица с товарами 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) |
| Автор: CruorVult 26.5.2011, 09:47 |
| ну что, предложений нету? а то вытаскивать всё скриптом пару тыщ записей и обрабатывать скриптом не оч... |
| Автор: CruorVult 26.5.2011, 10:18 | ||
вот придумал такое, если пришли фильтры 1 и 17
|
| Автор: CruorVult 27.5.2011, 11:57 |
| в вышеуказаном варианте работает не очень быстро.... когда в таблице gds_filters 35к записей то запрос выполняется 0.2-1.5 сек Что никто раньше с фильтрами не сталкивался? такое чувство что я общаюсь сам с собой |
| Автор: patap 27.5.2011, 12:25 | ||
| здается мне, что народ не может въехать, что такое группы и зачем оно, по крайней мере я ничего не понял: что там группируется, зачем, какие-то абстрактные группы, зачем их учитывать в запросе, ну и т.д. чем не устроит такой запрос?
Добавлено через 1 минуту и 35 секунд пришло 3 фильтра с ид равными: 1, 2 и 17 взяли и посчитали сколько товаров относится к каждому из фильтров. или я недогоняю что к чему )) |
| Автор: CruorVult 27.5.2011, 12:46 |
| Есть у нас группа "Производитель": Производитель (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:32 |
| Можно тему отзеркалить в разделе Базы Данных -> MySQL. Может так кто-то поможет. |
| Автор: CruorVult 1.6.2011, 11:34 |
| Сделал... всем ГРОМНОЕ СПАСИБО! За идеи, за подсказки! Без ВАС бы не получилось |