2012-02-23 2 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 относится к ид его родитель. Если parent_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 в порядке возрастания). Это было так просто.

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