Плоский стол в виде дерева - PullRequest
0 голосов
/ 24 февраля 2012

enter image description here Я получил таблицу сообщений в моей БД (для моей древовидной системы форумов) все сообщения являются дочерними для темы (вы можете увидеть в моем примере поле topicId, равное 79) что я делаю, это ВЫБЕРИТЕ все строки, у которых есть topicId 79 (в этом конкретном примере)

так что теперь я получил все сообщения в теме # 79 Вы можете увидеть поле parentId. если сообщение является ответом на тему, значение равно NULL в противном случае сообщение является дочерним по отношению к другому сообщению, поэтому оно имеет идентификатор родительского сообщения.

Теперь, как я уже сказал, у меня есть все строки темы # 79 и мне нужно отобразить их в виде дерева

каков наилучший способ сделать это?

кстати, я использую PHP + MySQL на платформе Yii Framework (и не хочу использовать виджеты zii)

спасибо за помощь

1 Ответ

1 голос
/ 24 февраля 2012

Ответ - рекурсия.

1. Во-первых, есть цикл, который получает все «родительские посты» (пост с parentId = null).

2.Для каждого «родительского поста» вызывается рекурсивная функция, которая печатает детали поста и сама вызывает его для дочерних постов.

Я не проверял код, но это основная концепция, которая поможет вам решить вашу проблему.

function build_tree_child($post_id,$level=0)
{
 $post = get_post_byId($post_id);
 foreach($i = 0; $i <$level;$i++) echo "&nbsp;"; //Simple trick to make it LOOK like a tree
 echo $post['title'];

 $q = mysql_query("SELECT * FROM posts WHERE parentId='$post_id'");
 while($childs = mysql_fetch_array($q))
  build_tree_child($child['id'] , $level++);

}
...