Задавайте вопросы, мы ответим
Вы не зашли.
Добрый день, хочу реализовать фасетный поиск на mysql. По сути это колонка с фильтрами которая очень часто используется для фильтрации товаров в интернет магазине. Например в магенто http://demo.magentocommerce.com/apparel
Сами данные хранятся в виде «ид товара» «ид атрибута» «ид фильтра»
И по реализации этой штуки возник ряд вопросов.
1) как быстро посчитать количество фильтра? В указанном мной примере, по ссылке, указывается количество товаров с указанным фильтров.
2)Как лучше хранить в таблице сами фильтры если их несколько для одного атрибута? Через запятую или каждый фильтр в отдельном рядке?
3)Будет ли получен существенный прирост при использовании типа таблиц MEMORY если ожидается 300к записей?
p.s. Чтобы было понятнее атрибут — это группа фильтров, фильтр это значения по которым фильтруем
p.s.s Очень хотелось бы сделать это на php mysql без использования сторонних фреймворков.
Неактивен
Преждевременная оптимизация — корень зла. Пишите нормализованные таблицы,
считайте количество через SELECT COUNT(*) FROM tablename WHERE attr = 7 AND value = 19.
При индексе на (attr, value) — это будет очень неплохо работать.
Неактивен
Значений фильтра более чем полсотни. Это для каждого значения нужно прописывать? Пожалуйста приведите пример запроса.
По attr выбирать не нужно value и так уникальные.
Неактивен
Уникальные — так уникальные
SELECT COUNT(*)
FROM tablename t1 JOIN tablename t2 USING (id) ...
WHERE t1.value = 19 AND t2.value = 154 ...
Индекс (id, value).
Неактивен
Спасибо! я нашёл ответ на стек оверфлоу буквально полчаса назад но там по другому.
Неактивен