Доброго времени суток уважаемые. У меня возникла проблема с кодом с выводом данных из таблицы. Вот это моя таблица [sql]CREATE TABLE `table_full` ( `ID` int(3) NOT NULL auto_increment, `ParentID` int(11) default '0', `Name` varchar(250) NOT NULL default '', `cat_li` enum('Yes','No') default 'No', `urls` varchar(100) default NULL, `actives_url` enum('on','off') NOT NULL default 'off', `texts` longtext, `lang` int(6) unsigned default NULL, `sortID` int(11) NOT NULL default '0', PRIMARY KEY (`ID`), KEY `ID` (`ID`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;[/sql] С помощью этой структуре таблицы можно создавать меню с многими подменюшками у которых тоже может быть подменюшки и т.д. Все это показывается в поле ParentID. Так вот мне и надо создать такое меню но у меня возникла проблема. Вот мой код пхп: PHP: <?php global $out,$mode; $prefix=""; $query = "select * from table_full where ParentID = '$parent_id'"; $result = mysql_query($query) or die(mysql_error()); while($row = mysql_fetch_array($result)) { if ($row['ParentID']==$mode ) { $out.="<li><a href=?lang=1&mode=".$row['ID'].">". htmlspecialchars_decode($row['Name'], ENT_QUOTES)."</a></li>"; } elseif ($row['actives_url']=='on') { $out.="<li><a href=http://".$row['urls'].">". htmlspecialchars_decode($row['Name'], ENT_QUOTES)."</a></li>"; } elseif (trim($row['texts'])=="") $out.="<li>". htmlspecialchars_decode($row['Name'], ENT_QUOTES)."</li>"; elseif ($row['actives_url']=='on') { $out.="<ul>".$prefix."<li><a href=http://".$row['urls'].">". htmlspecialchars_decode($row['Name'], ENT_QUOTES)."</a></li></ul>"; } elseif (trim($row['texts'])=="") $out.="<ul>".$prefix."<li>". htmlspecialchars_decode($row['Name'], ENT_QUOTES)."</li></ul>"; else $out.="<ul>".$prefix."<li><a href=?lang=1&mode=".$row['ID'].">". htmlspecialchars_decode($row['Name'], ENT_QUOTES)."</a></li></ul>"; } echo '<ul>'; print $out; echo '</ul>'; ?> С этим кодом у меня выходит так: HTML: Меню o Studii * categorie * dddddd А должно как то так: HTML: Меню * Studii o Facultati o fffffff * categorie * dddddd То есть он мне выводит только те поля у которых в поле ParentID стоит "0", это означает что это корень(то есть это не подменю.) А подменю не хочет выводить. А для полной ясности ниже скриншот таблицы с данными. Помогите девушкe пожалуйста )
lencic Какая степень вложенности, девушка? 2, 3? Произвольная? Мой родной язык тоже не русский, но это не оправдывает, увы, моих ошибок. Тем более грамматических (если уж на орфографические и пунктуационные закрываем глаза).
Тут может быть сколько угодно вложенностий. Это должен быть цикл который определяет является ли линия таблицы подменю и поставить его на место где он должен стоять. Мне кажется что это можно делать в функции но не знаю как именно.
Всё гораздо, ГОРАЗДО сложней с произвольной вложенностью. Искать в гугле по запросу "BTree PHP" или "Binary Tree Algorithms php" Одной функцией не отделаешься, девушка.
Я нашла в инете код который я уже настроила под себя: PHP: <?php function ShowTree($ParentID, $lvl) { global $link; global $lvl; global $mode; $lvl++; $sSQL="SELECT * FROM table_full WHERE ParentId=".$ParentID." ORDER BY ID"; $result=mysql_query($sSQL, $link); if (mysql_num_rows($result) > 0) { echo("<UL id='verticalmenu' class='glossymenu'>\n"); //echo("<UL>\n"); while ( $row = mysql_fetch_array($result) ) { $ID1 = $row["ID"]; if ($row['actives_url']=='on') { echo "<li><a href=http://".$row['urls'].">". htmlspecialchars_decode($row['Name'], ENT_QUOTES)."</a></li>"; } elseif (trim($row['texts'])=="") echo "<li>". htmlspecialchars_decode($row['Name'], ENT_QUOTES)."</li>"; else { echo("<li>\n"); echo("<A HREF=""."?mode=".$ID1."">".$row["Name"]."</A>"." \n"); ShowTree($ID1, $lvl); $lvl--; }} echo("</UL>\n"); } } ShowTree(0, 0); mysql_close($link); ?> а обычный код выглядит так: PHP: <?php function ShowTree($ParentID, $lvl) { global $link; global $lvl; $lvl++; $sSQL="SELECT id,title,pid FROM catalogue 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"]; echo("<LI>\n"); echo("<A HREF=""."?ID=".$ID1."">".$row["title"]."</A>"." \n"); ShowTree($ID1, $lvl); $lvl--; } echo("</UL>\n"); } } ShowTree(0, 0); mysql_close($link); ?> Кому надо берите. С этим кодом все очень просто, парень. Всю работу выполняет рекурсивная функция ShowTree()
Знаешь в чём проблема, девочка? Именно в том, что она рекурсивная. Профилирование тебе поможет увидеть все прелести её использования, а потом ты нам скажешь, как всё просто и рекурсивно =)