|
|
|
Организация структуры БД для фильтра товаров
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. У меня проблемы с проектированием таблиц в БД MySQL относительно текущей задачи. Я разрабатываю интернет-магазин. У магазина должны быть товары. Каждый товар может содержать произвольное количество опций. Эти опции так же могут быть произвольными(добавляется администратором). Допустим, админ должен уметь добавить новую категорию опций, пусть это будет "Цвет товара", дальше он может добавить к опции "Цвет товара" много различных цветов, Черный, белый и так далее. И эту опцию он может присвоить к любому товару при его добавлении. Проще говоря, администратор сайта должен иметь возможность при добавлении товара добавить к нему любые опции. Кроме всего перечисленного, есть необходимость сделать следующее: Предположим, у нас есть менюшка следующего типа: Ноутбуки - Acer(10) - Apple(5) - Lenovo(1) Цвет - Белый(10) - Красный(5) - Черный(1) Число в скобках - это количество товаров. Если мы выберем красный цвет в фильтре, тогда у нас должно в категории "Ноутбуки" остаться только Apple, а Acer и Lenovo должны исчезнуть(т.е не участвовать в выборке) потому что красных Lenovo и Acer в нашем магазине нету. Основная проблема заключается в проектировании самих таблиц и в установке связей между таблицами. Особенно не могу понять то, как спроектировать таблицы, что бы фильтры зависели друг от друга но не зависели от себя. Идей по этому поводу практически нет, прошу помочь если можете. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2014, 19:24:08 |
|
||
|
Организация структуры БД для фильтра товаров
|
|||
|---|---|---|---|
|
#18+
TheZeeЗдравствуйте. У меня проблемы с проектированием таблиц в БД MySQL относительно текущей задачи. Я разрабатываю интернет-магазин. У магазина должны быть товары. Каждый товар может содержать произвольное количество опций. Эти опции так же могут быть произвольными(добавляется администратором). Допустим, админ должен уметь добавить новую категорию опций, пусть это будет "Цвет товара", дальше он может добавить к опции "Цвет товара" много различных цветов, Черный, белый и так далее. И эту опцию он может присвоить к любому товару при его добавлении. Проще говоря, администратор сайта должен иметь возможность при добавлении товара добавить к нему любые опции. Кроме всего перечисленного, есть необходимость сделать следующее: Предположим, у нас есть менюшка следующего типа: Ноутбуки - Acer(10) - Apple(5) - Lenovo(1) Цвет - Белый(10) - Красный(5) - Черный(1) Число в скобках - это количество товаров. Если мы выберем красный цвет в фильтре, тогда у нас должно в категории "Ноутбуки" остаться только Apple, а Acer и Lenovo должны исчезнуть(т.е не участвовать в выборке) потому что красных Lenovo и Acer в нашем магазине нету. Основная проблема заключается в проектировании самих таблиц и в установке связей между таблицами. Особенно не могу понять то, как спроектировать таблицы, что бы фильтры зависели друг от друга но не зависели от себя. Идей по этому поводу практически нет, прошу помочь если можете. Спасибо. В наших проектах это реализовано так: 1 шаг То, что создает админ это структура тегов, которая хранится просто в обычном файле, а во время работы живет в кеше оперативной памяти, например - p_brand : Бренды -- b_acer : Acer -- b_apple : Apple -- b_lenovo : Lenovo - p_color : Цвета -- c_white : Белый -- c_red : Красный -- c_black : Черный 2 шаг Потом в каждом товаре мы просто создаем поле text, ставим на него индекс и кидаем в него любую солянку тегов через запятую, чтобы каждый тег всегда был окружен запятой, то есть первый символ всегда запятая и последний тоже запятая 3 шаг Все остальное достаем обычными лайками. Profit!! Это решение позволяет создавать любые логические завихрени и при этом очень дешево в реализации и доработке даже руками кодеров-стажеров!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2014, 19:54:17 |
|
||
|
Организация структуры БД для фильтра товаров
|
|||
|---|---|---|---|
|
#18+
Спасибо, что не оставили без внимания тему. Интересное решение. 1. Хранить в одном файле структуру фильтров 2. Хранить категории в БД с обязательным полем tags, где будут перечислены теги окруженные запятыми(только не очень понимаю для чего нужно именно так). 3. Когда пользователь выберет к примеру "Красный", то делать запрос наподобии SELECT `somecolumns` FROM `sometable` WHERE `tags` LIKE %$query% Я верно понимаю? Если да, то я думаю это будет только для самих товаров. Но как организовать так, что бы фильтры сами тоже зависели друг от друга но не от себя? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2014, 20:12:03 |
|
||
|
Организация структуры БД для фильтра товаров
|
|||
|---|---|---|---|
|
#18+
TheZee3. Когда пользователь выберет к примеру "Красный", то делать запрос наподобии SELECT `somecolumns` FROM `sometable` WHERE `tags` LIKE %$query% если он выберет красный, то поиск такой Код: sql 1. именно поэтому запятые с обоих сторон TheZeeНо как организовать так, что бы фильтры сами тоже зависели друг от друга но не от себя? осилите эту статью? http://dba.stackexchange.com/questions/59682/split-values-from-field-and-count-them-according-to-another-field ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2014, 21:08:33 |
|
||
|
Организация структуры БД для фильтра товаров
|
|||
|---|---|---|---|
|
#18+
В принципе я понял идею, фактически запятые это разделители, вместо них может быть какой нибудь другой символ. Спасибо Вам больше за поддержку! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2014, 21:17:54 |
|
||
|
Организация структуры БД для фильтра товаров
|
|||
|---|---|---|---|
|
#18+
TheZee, вариант вроде хороший, но при достаточном количестве параметрв будут тормоза. помимо этого могут ввести (специально или нет ) в любом месте буквы не той раскладки и шиш найдёшь. это лучше делать с помощью дерева. иметь два спправочника - справочник параметров : бренд,цвет,вес, и т.д. справочник свойств параметров - asus, dell, белый,чёрный и т.д. причём можно привязать свойства к параметрам . и таблца связи товара к свойствам. выглядит несколько громоздко, но справочники не большие , а все остальные таблицы индексируются поэтому фильтрация будет быстрой. к томуже организация фильтров для поиска упрощается . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2014, 03:42:32 |
|
||
|
Организация структуры БД для фильтра товаров
|
|||
|---|---|---|---|
|
#18+
Lumixдостаем обычными лайкамиу вас по 50 записей в таблицах? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2014, 06:05:48 |
|
||
|
Организация структуры БД для фильтра товаров
|
|||
|---|---|---|---|
|
#18+
tanglirLumixдостаем обычными лайкамиу вас по 50 записей в таблицах? судя по недавнему топику про лайки в 2Е8 записей это не основноая проблема. хотя и её не надо отбрасывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2014, 06:40:08 |
|
||
|
Организация структуры БД для фильтра товаров
|
|||
|---|---|---|---|
|
#18+
я бы всётаки не надеялся на лайки и на текст через запятую... чтоб потом не стать сдесь автором топика, где напишут - у вас денормализованая база, решение одно - нормализовать... таблица товаров таблица - критериев (1 цена 2 цвет 3 ещё чтото 4 размер итд) таблица значений (айди значения номер критерия значение 1 2 красный 2 2 синий 3 4 большой 4 4 средний ..... и табилца связи тавара и значений (айди из последней таблицы + айди товара) = у товара для заданого критерия заданое значение например кофеварка с синим цветом (номер-товара 2) найти по критериям синий большой это те товары, для которых в таблице значений по критерию синий или большой есть две записи. итого мы получим список товаров под фильтр получить сколько товаров для возможных фильтров осталось отвечающих текущему фильтру выбор из таблицы по типу айди каунт но с критерием, ади товара должен быть в списке айдишников полученных на предыдущем шаге. ========== goods 1 notebook 2 mouse 3 monitor types 1 color 2 size values 1 1 green 2 1 black 3 2 big 3 2 small attributes 1 1 (notebook green) 1 3 (notebook big) 2 1 (mouse black) 2 3 (mouse big) 1 показать начальное для фильтров select t.idtype,v.idvalue,count(distinct g.idgood) from types t join values v on(v.fk_idtype = t.idtype) join attributes a on (a.fk_idvalue = v.idvalue) join goods g on(g.idgood = a.fk_idgood) group by t.idtype,v.idvalue получим типо номер_типа(цвет) номер_значения(зелёный) кол-во_товаров потом юзер ключакет чтото. мы схожим запросом без групировки но с секцией веар получаем список товаров, отвечающих фильтру. потом делаем этот же запрос, только с проверкой - товар должен быть из списка товаров отвечающих текущему фильтру. в лоб так сказать решение... ну а дальше оптимизировать, если получиться медленно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2014, 12:46:21 |
|
||
|
Организация структуры БД для фильтра товаров
|
|||
|---|---|---|---|
|
#18+
alex564657498765453 более развернуто повторил моё предложение... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2014, 13:33:41 |
|
||
|
Организация структуры БД для фильтра товаров
|
|||
|---|---|---|---|
|
#18+
вадяalex564657498765453 более развернуто повторил моё предложение... :) та да, если взять число твоих коментариев на форуме и моих, то всё правильно - отец задаёт вектор, а салага быстренько реализует идею :):):):) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2014, 13:55:43 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38755459&tid=1834189]: |
0ms |
get settings: |
6ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
50ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
33ms |
get tp. blocked users: |
1ms |
| others: | 216ms |
| total: | 328ms |

| 0 / 0 |
