Рекурсивное обход дерева с помощью mysql через PHP

Я создаю анкету для клиента, которая требует, чтобы вопросы были организованы на 3 уровня уровней. Я успешно создал пользовательский интерфейс, однако я пытался в течение последних 3 часов извлекать данные из базы данных таким образом, чтобы все загружалось в нужном месте. База данных организована так клиентом, поэтому я не контролирую ее:

id description parentId 1 Level 1 0 2 Level 2 0 3 Level 1a 1 4 Level 1b 1 5 Level 1a1 3 

Я нашел аналогичный вопрос на моем сайте, но когда я попытался его решить, я получил следующее на повторе бесконечно:

Код:

 function makeList($par_id = 0) { //your sql code here $result = mysql_query("SELECT * FROM pB_test WHERE parentId = $par_id"); $pages = mysql_fetch_array( $result ); if (count($pages)) { echo '<ul>'; foreach ($pages as $page) { echo '<li>', $page['description']; makeList($page['parentId']); echo '</li>'; } echo '</ul>'; } } makeList(); 

Вывод:

 1 3 5 5 l l 3 5 5 l l 3 5 5 l l 3 5 5 l l 

Кто-нибудь знает, как это исправить и в чем проблема? ура

    Related of "Рекурсивное обход дерева с помощью mysql через PHP"

    Сделайте это рекурсивно:

     function printChildQuestions($parentid) { $sql="SELECT * FROM pB_test WHERE parentID=$parentid"; $result=mysql_query($sql); $i=0; while (true) { $row=mysql_fetch_array($result); if (!$row) break; if ($i==0) echo "<ul>"; $i=1; echo '<li>'.$row['id'].'&nbsp;'.$row['description'].'&nbsp;'.$row['parentId'].'</li>'; printChildQuestions($row['id']); } if ($i>0) echo '</ul>'; } printChildQuestions(0); 

    это нехорошо вызывать mysql-сервер и результат выборки каждый раз

    что, если у вас более 100 строк? или 200+

    используйте это для запроса только один раз:

     $result = mysql_query("SELECT * FROM test"); $arrs = array(); while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { $arrs[] = $row; } function build_tree($arrs, $parent_id=0, $level=0) { foreach ($arrs as $arr) { if ($arr['parent_id'] == $parent_id) { echo str_repeat("-", $level)." ".$arr['name']."<br />"; build_tree($arrs, $arr['id'], $level+1); } } } build_tree($arrs); 

    общий пример для таблицы

      id name parent_id