дерево иерархии

Kikher

Новичок
дерево иерархии

прочитал статью на http://www.wmate.ru/publics/article67.html очень понравилась!
теперь задался вопросом сделать из этого подобие карты сайта.
нужно что бы в этот скрипт при выводе выводилась информация из другой таблицы относящаяся к разделу (подразделу).
создал дополнительно таблицу где есть id_cat text_intro ....
вставляю с помощью цикла но выводит только первую найденную в статью и все...

PHP:
<?php
include( "config/dbopen.php" );

	function ShowTree($ParentID, $lvl) {
	
	global $link;
	global $lvl;
	
	$lvl++;		
	
	$sSQL = "SELECT id, title, pid FROM category WHERE pid = " . $ParentID . " ORDER BY title";
	
	$result = mysql_query($sSQL, $link);
	
if (mysql_num_rows($result) > 0) {
		echo("<UL>\n");
	while ( $row = mysql_fetch_array($result) ) {
		$ID1 = $row["id"];
		$result2 = mysql_query("SELECT * FROM article");
		$row2 = mysql_fetch_array($result2);
		echo("<LI>\n");
		if ($row["id"] == $row2["id_cat"]) 
		echo ("<A HREF=\"modules\article\view.php" . "?ID=" . $ID1 . "\">" . $row["title"]. "</A>" . "&nbsp;<br>\n"), $row2["text_intro"];
//		else echo("<A HREF=\"" . "?ID=" . $ID1 . "\">" . $row["title"]. "</A>" . "&nbsp;&nbsp;\n");
		//elseif {$row["pid"] }
		else echo $row["title"];
		
		ShowTree($ID1, $lvl); 
		$lvl--;
	}
		echo("</UL>\n");
	}
	
	}
ShowTree(0, 0);
?>
в чем загвоздка?
ведь вроде написано что if ($row["id"] == $row2["id_cat"]) то одно а нет то другое...
помогите пжлста!
 

Kikher

Новичок
в смысле???

-~{}~ 12.12.06 13:10:

подскажите нормальный метод тогда плз?
 

Kikher

Новичок
пока один..
возможно будем плодить...
тут бы для одно построить...
 

Фанат

oncle terrible
Команда форума
ты строишь дерево, состоящее из одного элемента?
 

Kikher

Новичок
я просто не так понял )) сорри!
я разобрался!

PHP:
<?php
include( "config/dbopen.php" );

	function ShowTree($ParentID, $lvl) {
	
	global $link;
	global $lvl;
	
	$lvl++;		
	
	$sSQL = "SELECT id, title, pid FROM category WHERE pid = " . $ParentID . " ORDER BY title";
	
	$category = mysql_query($sSQL, $link);
	
if (mysql_num_rows($category) > 0) {
		echo("<UL>\n");
	while ( $cat = mysql_fetch_array($category) ) {
		$ID1 = $cat["id"];
		echo("<LI>\n");
		$article = mysql_query("SELECT * FROM article WHERE id_cat=$cat[id]");
		
		echo $cat["title"];
		echo "<br>";
		while ($art = mysql_fetch_array($article)){
		echo "<A HREF=\"modules\article\view.php" . "?ID=" . $ID1 . "\">" .$art["text_intro"]. "</A>" . "&nbsp;<br>\n";
		}
	
		ShowTree($ID1, $lvl); 
		$lvl--;
	}
		echo("</UL>\n");
	}
	
	}
ShowTree(0, 0);
?>
спасибо!
 

Фанат

oncle terrible
Команда форума
Всё-таки, мне кажется, что быстрее будет выбрать все разделы одним запросом, а дерево построить уже скриптом.
 

Фанат

oncle terrible
Команда форума
нет, нельзя.
мне кажется, что мы не в детском саду, чтобы всё на пальцах объяснять. Достаточно и русского языка.

Сейчас ты, с помощью рекурсивной функции, обращаешься к базе данных, делая столько запросов, сколько элементов в дереве.
Я тебе предлагаю другой способ. Сначала выбрать все элементы в массив одним запросом, а потом, с помощью рекурсивной функции, обращаться уже к элементам этого массива. То есть, ПРИМЕР остаётся тот же самый.
просто вначале добавляется обычная выборка из базы в массив, а в самой функции вместо запроса
$sSQL = "SELECT id, title, pid FROM category WHERE pid = " . $ParentID . " ORDER BY title";
$category = mysql_query($sSQL, $link);
обращаешься к массиву.

Но если тебе это сложно, то оставь так, как сейчас.
 
Сверху