Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Фильтрация по атрибутам записи. Помогите составить оптимальный алгоритм 
:(
    Опции темы
EasyTask
Дата 24.3.2013, 08:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 26.7.2010

Репутация: нет
Всего: нет



Добрый день! Помогите составить оптимальный алгоритм для следующей ситуации.

Таблицы:
products - Хранит только идентификаторы продуктов
products_property - Хранит пары Идентификатор свойства/Значение свойства с сылкой на продукт
products_property_type - Хранит иденификаторы свойств

Задача:
Составить запрос, который бы делал выборку по нескольким свойствам.

Пример:
Выбрать все продукты, у которых свойство цена > 10 и категория "Стройматериалы"
Выбрать все продукты, у которых есть свойство изображение, свойство "В наличии" равно 1, свойство название равно "Краска"

Свойств очень много, поэтому вариант джойнить таблицу саму на себя не является оптимальным. Пожалуйста, подскажете решение. 
Заранее спасибо.
PM MAIL   Вверх
EasyTask
Дата 24.3.2013, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 26.7.2010

Репутация: нет
Всего: нет



Все свойства продукта, в том числе категория, хранятся в products_property

Пример одного продукта:

products
id = 25
cdate = 25.03.2013

products_property
product = 25
property = 12
value = 'Стройматериалы'
-
product = 25
property = 13
value = '1500'
-
product = 25
property = 14
value = 'Белый'
PM MAIL   Вверх
Zloxa
Дата 24.3.2013, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(EasyTask @  24.3.2013,  09:30 Найти цитируемый пост)
не является оптимальным

Это издержки той структуры, которую вы выбрали. Цена гибкости. smile 
Данная структура не предназначена для такого рода запросов. Нормального решения нет, только компромиссные.

Это сообщение отредактировал(а) Zloxa - 24.3.2013, 12:44


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
EasyTask
Дата 24.3.2013, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 26.7.2010

Репутация: нет
Всего: нет



Можете привести примеры таких решений? smile
PM MAIL   Вверх
Zloxa
Дата 24.3.2013, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Зачем? Вы и так знаете правильный ответ.
Цитата(EasyTask @  24.3.2013,  09:30 Найти цитируемый пост)
джойнить таблицу саму на себя



Это сообщение отредактировал(а) Zloxa - 24.3.2013, 13:00


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
EasyTask
Дата 24.3.2013, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 26.7.2010

Репутация: нет
Всего: нет



Я бы назвал такое решение не компромисным, а радикальным )
PM MAIL   Вверх
Zloxa
Дата 24.3.2013, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



EasyTask, после того, как вы договоритесь с собой/заказчиком принять это решение  не смотря на его радикальность, оно станет компроммисным  smile

Добавлено через 14 минут и 46 секунд
Цитата(EasyTask @  24.3.2013,  09:30 Найти цитируемый пост)
Выбрать все продукты, у которых свойство цена > 10 и категория "Стройматериалы"

Можно еще
Код

  were property = цена and value > 10
    or property = категория and value = "Стройматериалы"
  group by product
  having count(*)=2

Но это еще более радикальное решение


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
EasyTask
Дата 24.3.2013, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 26.7.2010

Репутация: нет
Всего: нет



Почему вы считаете это решение таким уж радикальным? smile Мне оно вполне нравится.
PM MAIL   Вверх
Zloxa
Дата 24.3.2013, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Потому, что это лучше джойна это может быть лишь в частных случаях, когда селективность предикатов слишком велика, чтобы использовать индекс. В случаях, когда индексный доступ по предикатам может быть эффективен, вариант с группировкой против варианта с джойном будет иметь лишнюю сортировку, необходимую для группировки.



--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0964 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.