2012-02-24 2 views
0

enter image description here私は すべて投稿トピックの子である(私のツリーベースのフォーラムシステムのために)私のDBに後テーブルを持って(あなたは私の例であるフィールドTOPICIDを見ることができます79) は私が何をすべきか、私はあなたがフィールドPARENTIDを見ることができるトピック#79 のすべての投稿をしましたので、今フラットテーブル

この特定の例では(79 TOPICIDたすべての行)を選択しています。投稿がトピックに返信された場合、値はNULL です。そうでない場合、投稿は親投稿のIDを持つように、別の投稿の子です。私が言ったように

今、私は、トピック#79 のすべての行を持っていると私は、ツリービュー

それを行うための最善の方法は何でそれらを表示する必要がありますか?

方法によって、私はYiiのフレームワークを搭載しPHP + MySQLを使用しています(とZIIウィジェットを使用する必要はありませんが)の助けを

おかげ

答えて

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とキャッシュをサポートしていると思います。 –

関連する問題