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

  • Автор темы Автор темы Kikher
  • Дата начала Дата начала

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"]) то одно а нет то другое...
помогите пжлста!
 
в смысле???

-~{}~ 12.12.06 13:10:

подскажите нормальный метод тогда плз?
 
пока один..
возможно будем плодить...
тут бы для одно построить...
 
ты строишь дерево, состоящее из одного элемента?
 
я просто не так понял )) сорри!
я разобрался!

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);
?>
спасибо!
 
Всё-таки, мне кажется, что быстрее будет выбрать все разделы одним запросом, а дерево построить уже скриптом.
 
нет, нельзя.
мне кажется, что мы не в детском саду, чтобы всё на пальцах объяснять. Достаточно и русского языка.

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

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