SQLinfo.ru - Все о MySQL PG day 17

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

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

Вы не зашли.

#1 17.06.2015 14:00:53

billizzard
Участник
Зарегистрирован: 17.06.2015
Сообщений: 2

Как создать запрос, для современного фильтра интернет-магазина

Есть таблица с товаром и в ней есть 15 столбцов с характеристиками этого товара, по которым может вестись поиск (цвет, материал ...)
Есть фильтры в интернет магазинах (к примеру на Яндекс маркете и в многих других магазинах) и там в фильтре отображаются только те характеристики товара, которые уже присутствуют в размещенных в таблице товарах.
Пример: В таблице есть рубашка синего и красного цвета, размера 32 и 35, из хлопка, с пуговицами. Так вот надо чтобы и в фильтре были доступны для выбора только красные и синий цвет, только размер 32 и 35, только материал хлопок ... .

Понятно что фильтр делается средствами php. Но как узнать все уникальные значения каждого столбца. Ведь не делать 15 запросов к таблице чтобы узнать уникальные значения каждого столбца.

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

Как это делается? В смысле, в какую сторону копать?
Причем такие фильтры очень распространены, есть ли какое-то стандартное решение? Или это надо какие-то дополнительные таблицы, но мне что-то на ум ничего не приходит адекватного...

Буду благодарен за помощь.

Неактивен

 

#2 17.06.2015 14:08:11

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3749

Re: Как создать запрос, для современного фильтра интернет-магазина

Зачем стремиться к 1 запросу? 15 запросов могут быть достаточно быстрыми.

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

SELECT DISTINCT color, size FROM goods;


Скорее всего магазин (типа amazon) выясняет наличие размера уже когда выбран цвет, а для этого делает дополнительный запрос через AJAX.

Неактивен

 

#3 17.06.2015 16:44:09

billizzard
Участник
Зарегистрирован: 17.06.2015
Сообщений: 2

Re: Как создать запрос, для современного фильтра интернет-магазина

Спасибо за ответ. Буду копать в этом направлении, просто не хочется терять в скорости, ее всегда не хватает))

Неактивен

 

#4 17.06.2015 16:52:39

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3749

Re: Как создать запрос, для современного фильтра интернет-магазина

Если Вы не можете представить себе простого алгоритма как это сделать, наверняка MySQL тоже не сможет. Попытки сократить число запросов очень часто приводят к тяжелым решениями и сильному снижению производительности.
Пример:
Есть книга (Война и Мир). Нужно составить: список героев, их возрастов, список упомянутых дат и список упомянутых продуктов питания.
Если решать задачу сразу, то это означает, что потребуется прочитать всю книгу и выписывать нужную информацию (аналог Full Table Scan). Если же имеются индексы по каждому параметру (именной указатель, указатель дат, указатель продуктов), то по каждому из индексов можно найти необходимое быстро.

Неактивен

 

#5 17.06.2016 08:49:40

Petval
Участник
Зарегистрирован: 17.06.2016
Сообщений: 3

Re: Как создать запрос, для современного фильтра интернет-магазина

billizzard написал:

Есть таблица с товаром и в ней есть 15 столбцов с характеристиками этого товара, по которым может вестись поиск (цвет, материал ...)
Есть фильтры в интернет магазинах (к примеру на Яндекс маркете и в многих других магазинах) и там в фильтре отображаются только те характеристики товара, которые уже присутствуют в размещенных в таблице товарах.

Вам лучше избавиться от 15-ти столбцов и провести нормализацию таблиц. Чтобы делать фильтры товаров как на Маркете вам потребуется выводить посетителю список возможных значений фильтров по конкретной категории товара. Потому сделайте отдельную таблицу фильтров и отдельную таблицу значений фильтров с привязкой к товарам (или отдельно таблицу значений и таблицу связки с товарами).

Неактивен

 

Board footer

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