Я действительно не фанат рекурсивного SQL.Я использовал его, он работает, но он всегда меня удивлял как ... yeck ...
Как насчет этого: создайте topicID (своего рода селектор, который будет включать все элементы, которые выв конечном итоге хотел бы иметь вывод) и выбрать на основе этого, упорядоченный по parentID.
SELECT * FROM $tbl WHERE topicID = 1 ORDER BY parentID;
Затем вы организуете так:
$output = array();
$currentParent = -1;
while( $row = $stmt->fetch(PDO::FETCH_OBJ) )
{
if( $currentParent != $row->ParentID )
{
$currentParent = $row->ParentID;
$output[ $currentParent ] = array();
}
$output[ $currentParent ][] = $row;
}
function outputLists( array $current, array $output )
{
echo '<ul>';
foreach( $current as $res )
{
echo '<li>';
echo $res->Name;
echo $res->Description;
echo $res->date_added;
// if it is set, clearly we have a node to traverse
if( isset( $output[ $res->ID ] ) )
// seed the next call to the function with the new
// node value (found in output) and it will create
// the appropriate ul and li tags
outputLists( $output[ $res->ID ], $output );
echo '</li>';
}
echo '</ul>';
}
// start with the group with parentID = 0
outputLists( $output[ 0 ], $output );
Итак, вместо рекурсивного SQL,у вас есть один выход из базы данных, создающий древовидную структуру в PHP.