我在网上找到了下面的线程评论示例,作者说这对他来说效果很好。但是,我在排序结果时遇到问题,因此线程注释位于正确的位置。这就是这个例子给我的:
示例作者说:“我使用一个简单且不依赖递归的系统。我基本上将整个线程“路径”存储为行字段。想要获得整个树结构?只需在路径上执行 ORDER BY列并使用如下的一些 PHP 代码进行格式化:"
示例数据
ID | Comment | Path
---+------------------------------+----------
0 | Comment #1 | 00
1 | Comment #1 reply | 00_01
2 | Comment #1 reply reply | 00_01_02
3 | Comment #2 | 00
4 | Comment #3 | 00
5 | Comment #3 reply | 00_04
示例 SQL
SELECT * FROM comments ORDER BY path
示例 PHP
while ($result = mysql_fetch_assoc($query)) {
$nesting_depth = count(explode("_", $result['path']));
$branch = str_repeat("--", $nesting_depth);
echo $branch {$result['comment']}";
}
示例结果
Comment #1
-- Comment #1 reply
---- Comment #1 reply reply
Comment #2
Comment #3
-- Comment #3 reply
我将确切的数据添加到我的 MySQL 数据库中并对其进行了测试并按预期工作。但是,如果我更改表中数据的顺序,它就不起作用。我会解释:
新的真实测试数据
ID | Comment | Path
---+------------------------------+----------
0 | Comment #1 | 00
1 | Comment #2 | 00
2 | Comment #3 | 00
3 | Comment #3 reply | 00_04
4 | Comment #1 reply | 00_01
5 | Comment #1 reply reply | 00_01_02
看看 row[4] 和 row[5],这些回复评论是最后添加的评论,并且极大地改变了结果的顺序:
新的测试结果
Comment #1
Comment #2
Comment #3
-- Comment #1 reply
---- Comment #1 reply reply
-- Comment #3 reply
这是个大问题!这家伙是在胡说八道还是我做错了什么?除非数据与您要显示的顺序完全相同,否则它将永远无法工作。我可以做一些简单的事情来修复订单吗?