2012-02-23 7 views
-1

コメントとその返信がSQLデータベースから引き出され、(PHPルーチン経由で)配列に格納されるマルチレベルコメントシステムを実装しました。ここで2つのネストされた応答( - > [子供]返信 - メインコメント返信する> [子供]返信)を有しているコメントのデータ構造の一例である:データベースから項目を削除するときに複数レベルのコメントエラーが発生する

Array ([0] => stdClass Object (**[self]** => stdClass Object ([id] => 1 [page_id] => 47iNetBet [parent_id] => 0 [name] => adam 1 [email] => [email protected] [url] => [comment] => main comment [dt] => 2012-02-23 13:05:13 [ip] => 127.0.0.1) **[childs]** => Array ([2] => stdClass Object ([self] => stdClass Object ([id] => 2 [page_id] => 47iNetBet [parent_id] => 1 [name] => adam 2 [email] => [email protected] [url] => [comment] => 1st reply [dt] => 2012-02-23 13:05:25 [ip] => 127.0.0.1) **[childs]** => Array ([3] => stdClass Object ([self] => stdClass Object ([id] => 3 [page_id] => 47iNetBet [parent_id] => 2 [name] => adam 3 [email] => [email protected] [url] => [comment] => 2nd reply [dt] => 2012-02-23 13:05:35 [ip] => 127.0.0.1) **[childs]** => Array ())))))) 

各コメントのPARENT_IDは、のIDを参照その親。 parent_idが0の場合、それはメインのコメントです。これは正常に動作します。これまでのところ、問題なく何度でもネストされたコメントを追加することができました。しかし、データベースから何かを削除したり、すべてのコメントを削除したり、新しいコメント(たとえまったく同じコメントID、parent_idsなど)を追加しても、ある時点で構造が乱れてしまうようです。ここでは、データベースからコメントを削除し、同じコメントデータとデータベースを再増殖後の同じ例は次のとおりです。

Array ([0] => stdClass Object (**[self]** => stdClass Object ([id] => 1 [page_id] => 47iNetBet [parent_id] => 0 [name] => adam 1 [email] => [email protected] [url] => [comment] => main comment [dt] => 2012-02-23 13:05:13 [ip] => 127.0.0.1) **[childs]** => Array ([2] => stdClass Object ([self] => stdClass Object ([id] => 2 [page_id] => 47iNetBet [parent_id] => 1 [name] => adam 2 [email] => [email protected] [url] => [comment] => 1st reply [dt] => 2012-02-23 13:14:40 [ip] => 127.0.0.1) **[childs] => Array (EMPTY???))))** [1] => stdClass Object ([childs] => Array ([3] => stdClass Object ([self] => stdClass Object ([id] => 3 [page_id] => 47iNetBet [parent_id] => 2 [name] => adam 3 [email] => [email protected] [url] => [comment] => 2nd reply [dt] => 2012-02-23 13:14:47 [ip] => 127.0.0.1) [childs] => Array ())))) 

あなたは後者の例でわかるように、第二子(メインコメント - >回答 - >返信する返信)空の配列です。この配列内にあるべきものは、ディスプレイの流れを壊す何らかの独立/不完全なコメントのように、最後に置かれています。 「コメント」テーブルをドロップして新しいテーブルを開始すると、すべてのものを削除し直すまで、すべてが正常に機能しているように見えます。

私は説明する方法を知らないが、これは変だ。私はコードが何か間違っていると想像することはできません。これはデータベースそのものを何かする必要がありますか?多分誰かに同様の問題があったでしょうか?たぶん誰かが私を正しい方向に向けることができます。私はどこを見始めるべきか知りません。

ご意見、ご提案をいただければ幸いです。

答えて

0

問題を解決しました。それは実際にはコード内のエラーでした。データベース内のレコードは特定の順序でフェッチする必要があります(昇順でparent_idでソートされます)。それはそれほど簡単でした。

関連する問題