В настоящее время я создаю модуль на основе магазина для одного из моих клиентов.У предметов есть много разных типов категорий, в которые они могут быть введены.В качестве примера я буду использовать радио.
Это может быть радиостанция типа handheld или mobile .У нас есть радиостанции, перечисленные по следующему пути:
store -> radios -> brand -> mobile / handheld -> item page
Это довольно просто сохранить, если бы это было одинаковое расположение для всех, но, увы, это не так просто.У них может быть аксессуар, который работает для всех радиостанций и брендов, и в этом случае он будет храниться в следующем формате:
store -> radios -> accessory -> item page
Это полная категория ниже радиоприемников, поэтому написание выберите должно быть разным для каждой группы товаров, что меньше, чем хотелось бы.Элементы также должны быть доступны из общей родительской категории, как если бы я посетил store -> radios
, я должен увидеть все элементы в этих подкатегориях.Вот текущая структура базы данных, которую я запланировал, и именно здесь у меня больше всего проблем (PS: категория идентификаторов уникальна, первична и имеет автоинкремент):
+===================================================+
| ID | Category Name | Path | Parent ID |
+===================================================+
| 1 | radios | radios | 0 |
| 2 | accessory | misc | 1 |
| 3 | motorola | motorola | 1 |
| 4 | handheld | handheld | 3 |
| 5 | mobile | mobile | 3 |
+===================================================+
Затем я устанавливаюcategory_id
о продукте, чтобы сказать .. 5 для моего мобильного радио, которое я добавляю на страницу продуктов.Если я захожу на страницу продукта, мне нужно получить путь для каждой из родительских категорий для отображения на странице, например
store/radios/motorola/mobile/product-page-here.html
. Мне нужно будет построить этот путь из вышеуказанной базы данных, используя путьполе и соединение для всех родительских классов, чтобы получить правильный путь.Прямо сейчас я делаю много select * FROM tblname WHERE id = parent
, а затем в цикле while этой команды выполняю другой выбор таким же образом, пока не вернусь к родительской таблице.Должен быть лучший способ сделать это, особенно если учесть, что я углубился только в 3 уровня, а клиент добавил подкатегорию глубиной в 4 уровня, и он никогда не был бы на правильном пути.
Последняя проблема заключается в том, что при использовании приведенного выше примера, если бы я вместо этого пошел к store/radios/motorola
, он попытался бы выбрать любые элементы, перечисленные в category_id
для 3
вместо 5
, иэлемент не будет отображаться на общей вкладке motorola
, поскольку вместо этого он является дочерним элементом таблицы mobile
, косвенным дочерним элементом таблицы motorola
.Предоставив им более 1 опции подкатегории, это сделало планирование всей этой системы огромной болью.
В любом случае, спасибо за чтение, оставьте свои комментарии или предложения ниже.Кстати, все это хранится в MySQL и вызывается из скрипта PHP.