Логическая задачка. Немогу решить.

Koochy

Новичок
Логическая задачка. Немогу решить.

Имеются записи вида
Главная группа|подгруппа1|подгруппа2|товар

Подгруп может быть от 0 до *.
В случае с 0 после главной группы сразу следует товар.

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

Беллитас|Стриктли Проф.|Ср-ва д/лица
Беллитас|Стриктли Проф.|Ср-ва д/тела
Беллитас|Норф стайл|Маникюр
Беллитас|Норф стайл|Педикюр
и т.д.
У каждого поля записан полный "путь".
Подскажите каким алгоритмом обрабатывать данные чтобы на выходе была древовидная структура?
 

Lamer_Scorp

Guest
немного смекалки, explode, implode и рекурсия тебя спасут.
 

jrip

Новичок
хм... как вариант:
родительский айди группы|название
родительский айди группы|название
родительский айди группы|название
родительский айди группы|название
если группа главная, то айди -1.

товары хранить в другом месте
айди группы|название товара
айди группы|название товара
айди группы|название товара

всё это дело легко обрабатывается рекурсией.
 

SelenIT

IT-лунатик :)
По-моему, рекурсия списке Lamer_Scorpа лишняя, и implode пожалуй тоже.
Имхо, сначала все сортируется, потом поочередно сверяются элементы пути с соответствующими элементами пути предыдущей записи - до первого расхождения. Обычный вложенный цикл.

в базе нельзя оформить всё по типу дерева
На самом деле можно. См. Избранное. пример jripа иллюстрирует один из популярных подходов (adjacency list).
 
Сверху