не простой фильтр поиска

Casper_R

Создатель
Регистрация
2 Май 2007
Сообщения
88
Реакции
33
Всем привет. Вопрос у меня более теоретический :)

Попалась задача сделать фильтр поиска, +- аналогичный поиску работы на сайте Для просмотра ссылки Войди или Зарегистрируйся (не сочтите за рекламу)

Для простоты формирования Вопроса я уже добавил там пару условий поиска - Для просмотра ссылки Войди или Зарегистрируйся

Я не могу вникнуть, как они в левом поисковом блоке к каждому пункту фильтра в скобочках указывают кол-во результатов поиска, если этот пункт будет применен?
Обычно такие фильтры в инете выглядят так:
- ставишь какой-то параметр поиска
- выполняется AJAX запрос с выбранными параметрами, который считает кол-во результатов

А тут уже все посчитано... ну не делают же они over 50 дополнительных запросов на просчет каждого варианта поиска ... блин как???
 
Я не могу вникнуть, как они в левом поисковом блоке к каждому пункту фильтра в скобочках указывают кол-во результатов поиска, если этот пункт будет применен?
Применяют условия с count(`id`) вместо выборки

И это можно легко закэшировать...
 
немного не верно сформулировал. как посчитать кол-во результатов, знают все :) суть вопроса в этом "ну не делают же они over 50 дополнительных запросов на просчет каждого варианта поиска". Сейчас гуглю, вроде это называется "Facets Search" или "Layered Navigation"... Что то есть тут - Для просмотра ссылки Войди или Зарегистрируйся, но чаще встречается отсылка к поисковому движку Sphinx
 
Интересно. Как я понял основано на создании промежуточной таблицы, в которой проиндексированы имена полей.
В php-mysql достигается умным объединением полей join. Таким образом достаточно сделать один запрос чтобы проверить текущее количество товаров.
Пример:
1. Создаётся таблица.
Код:
`products` (`id`, `name`, `type`, `brand`, `colour`)
2. К ней создается промежуточная таблица которая имеет в базе имена полей первой таблицы.
Код:
`product_facets` (`id`, `name`) VALUES
(1, 'type'),
(2, 'brand'),
(3, 'colour');
3. Объединяются таблицы и выводится одним запросом в 3ую таблицу для фильтра:
Код:
`product_facts` (`product_id`, `facet_id`, `facet_name`, `value`)
 
Назад
Сверху