powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Организация структуры БД для фильтра товаров
12 сообщений из 12, страница 1 из 1
Организация структуры БД для фильтра товаров
    #38755184
TheZee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте. У меня проблемы с проектированием таблиц в БД MySQL относительно текущей задачи.

Я разрабатываю интернет-магазин. У магазина должны быть товары. Каждый товар может содержать произвольное количество опций. Эти опции так же могут быть произвольными(добавляется администратором). Допустим, админ должен уметь добавить новую категорию опций, пусть это будет "Цвет товара", дальше он может добавить к опции "Цвет товара" много различных цветов, Черный, белый и так далее. И эту опцию он может присвоить к любому товару при его добавлении.

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

Ноутбуки
- Acer(10)
- Apple(5)
- Lenovo(1)

Цвет
- Белый(10)
- Красный(5)
- Черный(1)

Число в скобках - это количество товаров. Если мы выберем красный цвет в фильтре, тогда у нас должно в категории "Ноутбуки" остаться только Apple, а Acer и Lenovo должны исчезнуть(т.е не участвовать в выборке) потому что красных Lenovo и Acer в нашем магазине нету.

Основная проблема заключается в проектировании самих таблиц и в установке связей между таблицами.
Особенно не могу понять то, как спроектировать таблицы, что бы фильтры зависели друг от друга но не зависели от себя.
Идей по этому поводу практически нет, прошу помочь если можете. Спасибо.
...
Рейтинг: 0 / 0
Организация структуры БД для фильтра товаров
    #38755205
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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!!

Это решение позволяет создавать любые логические завихрени и при этом очень дешево в реализации и доработке даже руками кодеров-стажеров!!
...
Рейтинг: 0 / 0
Организация структуры БД для фильтра товаров
    #38755217
TheZee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, что не оставили без внимания тему. Интересное решение.

1. Хранить в одном файле структуру фильтров

2. Хранить категории в БД с обязательным полем tags, где будут перечислены теги окруженные запятыми(только не очень понимаю для чего нужно именно так).

3. Когда пользователь выберет к примеру "Красный", то делать запрос наподобии
SELECT `somecolumns` FROM `sometable` WHERE `tags` LIKE %$query%

Я верно понимаю? Если да, то я думаю это будет только для самих товаров. Но как организовать так, что бы фильтры сами тоже зависели друг от друга но не от себя?
...
Рейтинг: 0 / 0
Организация структуры БД для фильтра товаров
    #38755251
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TheZee3. Когда пользователь выберет к примеру "Красный", то делать запрос наподобии
SELECT `somecolumns` FROM `sometable` WHERE `tags` LIKE %$query%

если он выберет красный, то поиск такой

Код: sql
1.
select * from ware where wareTag like '%,c_red,%'



именно поэтому запятые с обоих сторон

TheZeeНо как организовать так, что бы фильтры сами тоже зависели друг от друга но не от себя?

осилите эту статью?
http://dba.stackexchange.com/questions/59682/split-values-from-field-and-count-them-according-to-another-field
...
Рейтинг: 0 / 0
Организация структуры БД для фильтра товаров
    #38755256
TheZee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В принципе я понял идею, фактически запятые это разделители, вместо них может быть какой нибудь другой символ.
Спасибо Вам больше за поддержку!
...
Рейтинг: 0 / 0
Организация структуры БД для фильтра товаров
    #38755427
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TheZee,
вариант вроде хороший, но при достаточном количестве параметрв будут тормоза. помимо этого могут ввести (специально или нет ) в любом месте буквы не той раскладки и шиш найдёшь. это лучше делать с помощью дерева. иметь два спправочника -
справочник параметров : бренд,цвет,вес, и т.д.
справочник свойств параметров - asus, dell, белый,чёрный и т.д.
причём можно привязать свойства к параметрам .
и таблца связи товара к свойствам.
выглядит несколько громоздко, но справочники не большие , а все остальные таблицы индексируются поэтому фильтрация будет быстрой.
к томуже организация фильтров для поиска упрощается .
...
Рейтинг: 0 / 0
Организация структуры БД для фильтра товаров
    #38755450
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumixдостаем обычными лайкамиу вас по 50 записей в таблицах?
...
Рейтинг: 0 / 0
Организация структуры БД для фильтра товаров
    #38755459
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirLumixдостаем обычными лайкамиу вас по 50 записей в таблицах?
судя по недавнему топику про лайки в 2Е8 записей это не основноая проблема.
хотя и её не надо отбрасывать.
...
Рейтинг: 0 / 0
Организация структуры БД для фильтра товаров
    #38755994
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я бы всётаки не надеялся на лайки и на текст через запятую...

чтоб потом не стать сдесь автором топика, где напишут - у вас денормализованая база, решение одно - нормализовать...

таблица товаров

таблица - критериев (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

получим типо
номер_типа(цвет) номер_значения(зелёный) кол-во_товаров

потом юзер ключакет чтото.
мы схожим запросом без групировки но с секцией веар получаем список
товаров, отвечающих фильтру.

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

в лоб так сказать решение...

ну а дальше оптимизировать, если получиться медленно.
...
Рейтинг: 0 / 0
Организация структуры БД для фильтра товаров
    #38756106
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex564657498765453 более развернуто повторил моё предложение... :)
...
Рейтинг: 0 / 0
Организация структуры БД для фильтра товаров
    #38756164
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяalex564657498765453 более развернуто повторил моё предложение... :)

та да, если взять число твоих коментариев на форуме и моих, то всё правильно - отец задаёт вектор, а салага быстренько реализует идею :):):):)
...
Рейтинг: 0 / 0
Организация структуры БД для фильтра товаров
    #38756194
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зачтено :)
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Организация структуры БД для фильтра товаров
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]