Forum Webscript.Ru
Программирование => Теория, алгоритмы и стандарты => Тема начата: bhor от 24 Марта 2003, 15:10:23
-
есть таблица в mysql`е: id,parent,name
покажу на примере.
id=1
parent=-1
name=мясо
id=2
parent=1
name=куры
id=3
parent=2
name=бройлеры
вывод должен быть таким
мясо
куры
бройлеры
уровней может быть до бесконечности. помогите написать цикл
-
Я такую штуку делал. Если хочешь - скину исходник, может найдешь тама что полезное.
-
на
andrew|@|webscript.ru
-
Впринципе пример у меня есть. но такой накрученный(делался под сайт компутерного магазина) разобраться в нем невозможно.
хотелось бы посмотреть на чистый код. Или алгоритм как это сделать.
-
bhor
Из того, что я тебе прислал - смотри table2tree.php.
Этот как раз оно.
-
Xander, а всем показать не хочешь? мне, например, интересно посмотреть на решение. или скрипт скрывается за копирайтом? ;-)
-
USE
магистры с тобой %)
просто я сам забыл, как делал, а оказалось что там кусочек совсем маленький:
function PrintIt($res) {
$name = $res[\'name\'];
$alias = $res[\'alias\'];
echo "- $name";
}
function GetNode($id,$proceed,$isRecursive=1) {
global $query_counter;
echo "";
if ($id == \'NULL\') {
$query = "SELECT * FROM dispatch WHERE parentid IS NULL";
} else {
$query = "SELECT * FROM dispatch WHERE parentid=$id";
}
$result = mysql_query($query);
$query_counter++;
if (mysql_num_rows) {
while ($row = mysql_fetch_assoc($result)) {
call_user_func($proceed,$row);
GetNode($row[\'id\'],$proceed);
}
}
echo "
";
}
//GetNode(\'NULL\',\'PrintIt\');
-
да прибудет с тобой сила Xander, полезный это кусочек ;-) понравился очень и просто и работает. можно использовать его? ;-)
-
USE
Если ты уверен в том, что делаешь - то на здоровье.
А то там могут быть глюки. Ежели наши PHP-гуру добро дадут...
-
Xander
Спасибо. то что надо. работает усё
-
Xander:
Если ты уверен в том, что делаешь - то на здоровье.
нужна была идея, а ты ее дал - это самое главное, теперь у меня начала работать карта сайта ;-)
спасибо, кстати.
-
2moderators: а перекиньте ветку в Алгоритмы. Там она гораздо уместнее будет.
-
Господа, не хочу быть ложкой дёгтя в бочке райского наслаждения, но не кажется ли Вам, что от такого кода загнется SQL-сервер? (я про количество запросов). В MP 1.5.x я подобную задачу решил несколько по-иному ($section - строка из БД с описанием текущего раздела):
$query=$db->query("SELECT * FROM $table_sections WHERE 1 ORDER BY sort ASC");
$parent_array=array();
foreach($tmp as $line)
$parent_array[$line[\'sid\']]=array($line[\'parent\'],$line[\'snamr\'],$line[\'sname\']);
$parent=$section[\'parent\'];
while($parent!=0)
{
$nav_array[]=array($parent_array[$parent][1],$parent_array[$parent][2]);
$parent=$parent_array[$parent][0];
}
У меня верхний parent - 0
-
[off] ну а я в который уже раз напомню, что деревья, которые сравнительно редко меняют свою структуру лучше хранить по алгоритму Nested Sets, позволяющему за 1-2 запроса получить почти любой фрагмент дерева. http://dev.e-taller.net/dbtree
Хотя мне известен один древовидный форум с 30 000 сообщений успешно работающий и хранящий дерево сообщений по этому алгоритму. [/off]
-
деревья, которые сравнительно редко меняют свою структуру
позволю усомниться, что система, типа форума, относится к данному классу деревьев [off]могу ошибаться...[/off]
-
ThE0ReTiC
согласен. Я бы для форума этот алгоритм не рискнул использовать (хотя после того как пообщался с автором данного форума я еще подумаю).
Там просто структура дерева находится в одной таблице (из 4 int-полей) а данные во второй - связанные со структурой по первичному ключу. Поэтому если в дерево нужно внести новый элемент, изменяется только первая таблица (изменения происходят быстро благодаря тому что таблица имеет фиксированную длинну и всего один индекс).
-
ThE0ReTiC:
могу ошибаться...
древние форумы аля
forum.myweb.ru [OFF]сори за рекламу[/OFF] именно такие
ЗЫ: [OFF]где фотки?[/OFF]
-
где фотки?
в этот раз их не было...
приезжай в след раз - привози фотоаппарат - будут фотки :)
-
ThE0ReTiC, в форумах обычно фиксированная вложенность "дирректорий"... а тут речь идет о "бесконечной"...
-
я...
да ладно?
В приличных древовидных форумах никаких ограничений вложенности кроме модераторов имхо не бывает.
-
я...
потом надо учесть высокодинамичное поведение листьев (посты) и веток (темы), близких к конечному
-
Xander, пример, плз...
ThE0ReTiC, но это уже, пожалуй, к конкретной задаче...
-
Да хотя бы http://www.forum.veresk.ru/
Где там ограничение вложенности?
Или wtboard.
-
Xander, это нерациональные исключения...
при большой загрузке деревья будут долго генерироваться...
[OFF]Еще...при большой загрузке ими будет просто неудобно пользоваться...[/OFF]
-
я...
Спорить не буду. Но форумы есть и они вполне хорошие. Кстати wtboard\'у на нагрузку пофигу, потому что он работает на статике.
-
v bolee serioznyh impelemtatsiah eto delaetsia s pomoshiu SQL... V oracle est\' CONNECT BY PRIOR
http://www.arrowsent.com/oratip/tip40.htm
Vstrechnyi vopros, nikto ne znaet esli v MySQL takaia anlogia est\' ili budet podderzhivatsa naprimer v 4.1 ??