В магазинах, как то VM, JShopping и других используется похожий способ хранения категорий
CREATE TABLE IF NOT EXISTS `categories` (
`category_id` int(11) NOT NULL AUTO_INCREMENT,
`category_parent_id` int(11) NOT NULL)
В файле загрузки имеем категорию "КАТЕГОРИЯ 1 УРОВНЯ\КАТЕГОРИЯ 2 УРОВНЯ\категория 3 уровня". В данном случае 3 уровня. А может быть 4, 5. Теоретически их может быть 10, 11 и т. д.
Нужно проверить наличие данных категорий в таблице `categories`. Ума не приложу как это можно сделать. Предполагаю что с помощью рекурсивной функции. Но как?
Скажем разбил я строку explode
ну и что это даёт?
Если перебирать с условиями, что это категория имеет paren_id =0, то переходим к следующей категории.
Если не имеет совпадений, то создаём новую с parent_id=0. В какой-то переменной запоминаем (хотя в данном случае можно и мудрить с двухмерным массивом) значение id категории первого уровня.
Далее смотрим номер цикла:
если это $x=1, то проверяем существование категории с таким уровнем; если она не существует, то создаём с parent_id =запомненному ранее значению; если она существует, то проверяем совпадает ли parent_id с запомненным ранее, если нет, то опять же создаём её, если да, то запоминаем и переходим к следующему циклу.
Т. е. это надо прописывать все if для каждого цикла. Условия умножаются в геометрической прогрессии. Очевидно это неправильный путь решения, т. к.
1) это некрасиво
2) количество категорий будет ограничено прописанными условиями и до десятого цикла код разрастётся так, что невозможно будет его переварить.
Как реализовать всё это какой нибудь красивой рекурсивной функцией (функцией класса, выделяю это потому, что классы только начал изучать и как в классе применить рекурсивную функцию - не представляю)?
|