2012-02-24 3 views
0

enter image description here я получил сообщение таблицы в моей БД (для моего дерева на основе системы форума) всех сообщений являются детьми в темы (вы можете увидеть в моем примере поля TopicID который 79) то, что я делаю, это выбрать все строки, которая TopicID 79 (в данном конкретном примере)Плоский столик с видом на дерево

так что теперь я получил все сообщения темы # 79 вы можете увидеть поле ParentID. если сообщение отвечает на эту тему, значение равно NULL , иначе Post является дочерним объектом другой Почты, поэтому он имеет идентификатор родительского сообщения.

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

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

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

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

ответ

1

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

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++); 

} 
+0

эффективно ли выполнять все эти запросы только для показа темы темы? – socksocket

+0

Вы используете YiiFramework, я предполагаю, что он поддерживает Active Record и кеш. –

Смежные вопросы