IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Веб-программирование (http://www.imho.ws/forumdisplay.php?f=29)
-   -   [php] Постройка дерева по данным базы (http://www.imho.ws/showthread.php?t=43877)

[stv] 20.11.2003 15:51

[php] Постройка дерева по данным базы
 
Есть таблица категорий category с колонками category_id INT, name VARCHAR(255) и parent INT.

Parent ссылается на category_id родительской категории, -1 означает, что эта катеория корневая.. Требуется построить дерево так, чтобы оно иерархически отображало структуру категорий.

К примеру:

TABLE Category
(category_id) - (name) - (parent)
0 - Новости - (-1)
1 - Категория новостей 1 - 0
2 - Категория новостей 2 - 0
3 - Файлы - (-1)
4 - Категория файлов 1 - 3
5 - Категория файлов 2 - 3
6 - Подкатегория новостей - 1
7 - Подкатегория файлов - 5

Должно отображаться так:

Новости
- Категория новостей 1
- - Подкатегория новостей
- Категория новостей 2
Файлы
- Категория файлов 1
- Категория файлов 2
- - Подкатегория файлов

Помогите с алгоритмом обработки...

medved2002 20.11.2003 16:41

А какой тут вариант кроме рекурсии?

Добавлено через 6 минут:
если у тебя база конечно мускул..

function getTree($parent=-1, $link){
result = mysql_query('select from category where parent = '.$parent, $link);
for($i=0; $i<mysql_numRows($result); $i++){
echo mysql_result($i, 'name', $result);
getTree(mysql_result($i, 'id', $result), $link)
}
}

Вообще стоит подумать - каких запросов выполняется больше на выборку или изменение и взависимости от этого выбрать структуру базы - ибо при большом дереве это все будет долго выполняться

V0iD 20.11.2003 17:28

Имхо луше взять всю базу в массив, а выборку прозводить потом... Т.е. не пускать множество mysql запросов...

medved2002 20.11.2003 17:33

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

V0iD 20.11.2003 17:38

Это какой же размер должен быть у дерева, чтобы память "ушла в никуда"?!

З.Ы. Кстати, это база от скрипта php_catalog, я угадал?

medved2002 20.11.2003 17:44

Да не особо большой, и пользователя так три одновременно

[stv] 20.11.2003 20:14

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

Да, насчет php_catalog - увы, нет. Это я сам пытаюсь написать CMS, для админской панели нужно...

medved2002 21.11.2003 13:17

Вот этот вариант - для быстрая выборка, но долгое добавление
http://searchdatabase.techtarget.com...537290,00.html

Добавлено через 1 минуту:
Посвещенно тойже проблеме с кодами на ПХП
http://www.sitepoint.com/article/1105/

Добавлено через 1 минуту:
До кучи
http://www.evolt.org/article/Four_wa...047/index.html

[stv] 21.11.2003 19:26

medved2002
Премного благодарен, очень помогло :)
Спасибо!


Часовой пояс GMT +4, время: 21:31.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.