SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 27.01.2011 12:13:58

alesto
Участник
Зарегистрирован: 27.01.2011
Сообщений: 19

Фасетный поиск

Добрый день, хочу реализовать фасетный поиск на mysql. По сути это колонка с фильтрами которая очень часто используется для фильтрации товаров в интернет магазине. Например в магенто http://demo.magentocommerce.com/apparel
Сами данные хранятся в виде «ид товара» «ид атрибута» «ид фильтра»

И по реализации этой штуки возник ряд вопросов.

1) как быстро посчитать количество фильтра? В указанном мной примере, по ссылке, указывается количество товаров с указанным фильтров.

2)Как лучше хранить в таблице сами фильтры если их несколько для одного атрибута? Через запятую или каждый фильтр в отдельном рядке?

3)Будет ли получен существенный прирост при использовании типа таблиц MEMORY если ожидается 300к записей?

p.s. Чтобы было понятнее атрибут — это группа фильтров, фильтр это значения по которым фильтруем

p.s.s Очень хотелось бы сделать это на php mysql без использования сторонних фреймворков.

Неактивен

 

#2 28.01.2011 01:45:03

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Фасетный поиск

Преждевременная оптимизация — корень зла. Пишите нормализованные таблицы,
считайте количество через SELECT COUNT(*) FROM tablename WHERE attr = 7 AND value = 19.
При индексе на (attr, value) — это будет очень неплохо работать.

Неактивен

 

#3 28.01.2011 12:10:24

alesto
Участник
Зарегистрирован: 27.01.2011
Сообщений: 19

Re: Фасетный поиск

Значений фильтра более чем полсотни. Это для каждого значения нужно прописывать? Пожалуйста приведите пример запроса.
По attr выбирать не нужно value и так уникальные.

Неактивен

 

#4 28.01.2011 17:27:10

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Фасетный поиск

Уникальные — так уникальные smile

SELECT COUNT(*)
FROM tablename t1 JOIN tablename t2 USING (id) ...
WHERE t1.value = 19 AND t2.value = 154 ...

Индекс (id, value).

Неактивен

 

#5 28.01.2011 17:28:20

alesto
Участник
Зарегистрирован: 27.01.2011
Сообщений: 19

Re: Фасетный поиск

Спасибо! я нашёл ответ на стек оверфлоу буквально полчаса назад но там по другому.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson