Я хотел бы написать рекурсивную функцию PHP для извлечения всех дочерних элементов для указанной категории. Я попробовал один описанный here, но он не выводил то, что я ожидал.Рекурсивная функция PHP для извлечения всех дочерних элементов категории
Мои категории таблица выглядит следующим образом:
CREATE TABLE `categories` (
`category_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
`category_name` varchar(256) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`category_slug` varchar(256) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`category_parent` smallint(5) unsigned NOT NULL DEFAULT '0',
`category_description_ro` text CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`category_description_en` text CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`category_id`)
) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=latin1
пыльник пример данных в таблице:
category id | category name | category_parent
1 Categoria 1 0
2 Categoria 2 0
3 Categoria 3 0
4 Categoria 1.1 1
5 Categoria 1.2 1
6 Categoria 1.3 1
7 Categoria 1.1.2 4
Спасибо.
Обратите внимание, что это довольно неэффективный способ хранения/извлечения иерархии в базе данных. Возможно, вы захотите пойти по схеме [материализованный путь] (http://www.google.com/search?q=materialized+path). – troelskn
Неэффективно да, но эту задачу можно выполнить с помощью одного запроса + манипуляции с массивом php. –
Другой разумной схемой является вложенный набор или схема вложенных интервалов. – Gumbo