Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
Прошу "помощь зала", т.к. свой мозг иссяк за 3 дня мозговой деятельности.. Поиск не помог. (много тем схожих но везде данный аспект не затронут)
база MySQL
+родственный мне PHP (хотя не внем тут проблема)
Есть упрощенно такая структура таблиц (каталог товаров, с фильтрацией по характеристикам):
Неактивен
Кажется, это проблема таки PHP Вы должны для себя определиться с тем,
что отображать, и делать соответствующие запросы к базе. В частности, в
том фильтре отображаются просто все доступные виды процессоров.
Неактивен
Возможно в итоге приду к выводу что все-таки Вы правы, но взгляните..
вот к примеру тот же фильтр, только я выбрал в добавок еще "память=8гб"
http://rozetka.com.ua/notebooks/c80004/ … 0863=1034/
- часть серий процессоров УЖЕ показывается как "0"...
тут также аналогично:
http://protoria.ua/laptops-accessories/ … p1379v2275
тут аналогичная логика:
http://hotline.ua/gd/12/9890/
(только параметры для которых 0 предложений просто не отображаются)
..все это наводит меня на мысль что это как-то "стандартно, красиво" реализуется...
Отредактированно Sasha_ch (15.05.2011 01:25:46)
Неактивен
допустим посетитель выбрал "Intel Core i7", -> ему отображаются только модели товаров у которых есть именно такое значение в свойстве "процессор".
Уже именно для этих товаров, я МОГУ вывести фильтры по всем свойствам/значениям которыми обладают отобранные товары, и просчитать для каждого значения - количество товаров (из отобранных) обладающих этим параметром (и параметрами выбранными до этого, если они были выбраны).
- Но в этих фильтрах не будет естественно "Core i5" - т.к. нет таких моделей ноутбуков у которых и i5 и i7 )
Тоесть логика получается у меня: что я вывожу в фильтрах только те свойства и значения которыми обладают товары из таблицы products, у которых value_id=22 (допустим 22 - это айдишник значения Core i7)
а дальше у меня идет просто сплошной "блин" какойто... - а какая у них логика то?? %)
Отредактированно Sasha_ch (15.05.2011 01:55:34)
Неактивен
мне эта задачка уже напоминает какую-то задачу с олимпиады по математике ... )
вроде сначала (по не внимательности) кажется просто, а потом понимаешь что не совсем ))
Неактивен
ну не могу я поверить что все эти разные люди писавшие эти выборки для этих сайтов одинаково решили эту задачку ))
...возможно я ошибаюсь.. но пока "не верю" )
Неактивен
возможно будет проще думать глядя на заполненную таблицу:
categories (category_id, name)
____________100______ноутбуки
____________101______сумки
products (product_id, category_id, name);
____________1_________100_____Toshiba A100
____________2_________100_____Toshiba A200
____________3_________100_____Toshiba A300
____________4_________100_____Toshiba A400
properties (property_id, category_id, ...);
____________1________100__________ //процессор
____________2________100__________ //память
values(value_id, value, category_id)
________950_____2GB______100
________951_____4GB______100
________952_____8GB______100
________953_____i5________100
________954_____i7________100
properties_values (product_id, value_id,category_id,property_id);
__________________1__________950_____100______2 // 2GB
__________________1__________953_____100______1 // i5
__________________2__________951_____100______2 // 4GB
__________________2__________953_____100______1 // i5
__________________3__________952_____100______2 // 8GB
__________________3__________954_____100______1 // i7
__________________4__________952_____100______2 // 8GB
__________________4__________954_____100______1 // i7
...головоломка в: выбрать значения фильтров для товаров у которых value_id=954, и притом чтобы в фильтр попал value_id=953 !!! Как??
Отредактированно Sasha_ch (15.05.2011 14:27:35)
Неактивен
Я понял, вы хотите чиселки возле фильтров. Чиселки надо считать, ничего с этим не поделаешь.
Ноль появляется тогда, когда при подсчете текущих параметров фильтров + установленном новом
получается ноль строк А сами фильтры рисуются независимо.
Неактивен
paulus написал:
Чиселки надо считать, ничего с этим не поделаешь
согласен. возможно даже через count(value_id) ...
paulus написал:
Ноль появляется тогда, когда при подсчете текущих параметров фильтров + установленном новом
получается ноль строк
так.. счас часок помозгую над этим... у меня каждая даже косвенная идея вызывает подозрение на возможное решение моей уже глобальной проблемы )
Неактивен
в таблицу properties_values добавил столбец property_id
Неактивен
paulus написал:
Я понял, вы хотите чиселки возле фильтров. Чиселки надо считать, ничего с этим не поделаешь.
Ноль появляется тогда, когда при подсчете текущих параметров фильтров + установленном новом
получается ноль строк А сами фильтры рисуются независимо.
сори, у меня ну ничего толкового пока не выходит... у Вас случаем не было какой-то идеи-алгоритма как это реализовать?
хотя бы какой результат SELECTа к какому прибавлять/отнимать...?
ну тупо получать спискок всех value_id для всей категории, и потом перебором делать по каждому value_id селект который возвратит к-во товаров для него - это ж вроде не дело получается...
Отредактированно Sasha_ch (15.05.2011 17:04:12)
Неактивен
Конечно. У вас есть некоторый текущий фильтр. По нему выбирается N товаров.
Если пользователь выберет еще и другой процессор, то фильтр будет чуть другим,
и по нему выберется M товаров. Вот M - N надо написать в скобочках
Почему получается не дело — не понимаю. Если аккуратно расставить индексы
(а где-то и денормализовать), то это вполне реальная задачка.
Неактивен
Извиняюсь, немного вылетел из работы над этой задачей, сейчас вернулся к этому, и вспомнил что я не отписал ответ здесь... (
Хочу сказать что в итоге именно так и пришлось сделать. (сейчас доделываю уже)
то есть получилось:
1. Запрос который получает все свойства которые есть у товаров в этой категории.
Если выбраны какие-то "фильтра" у пользователя, то:
2. Запрос всех свойств для товаров которые имеют свойства заданные пользователем.
3. Последовательно селект по каждому заданному пользователем фильтру.
получается,если пользователь задействовал 10 фильтров (крайне исключительная ситуация), то будет +10 отдельных запросов.
...и потом небольшая арифметика.
Хочу поблагодарить за помощь, хотя по началу как то не верилось что придется так накручено делать...
думал полегче будет решение )
Отредактированно Sasha_ch (22.07.2011 16:01:21)
Неактивен
Страниц: 1