好吧,我意识到有很多方法可以完成评论。我选择的方式是这样设置的一张桌子。嵌套评论系统mysql订购
id comment date time orig_comment
1 Hello 03-01-2013 10:10:10 0
2 Hello 03-02-2013 10:10:10 0
3 Hello 03-03-2013 10:10:10 1
因此,要清除有第一级,然后用户可以回复该评论(这是唯一的两个级别)。我给每个唯一递增的id,并指定orig_comment。如果orig_comment是“0”,那么它是基本级别的评论,如果它是嵌套的,则orig_comment将是原始评论的ID。够简单。所以我当然需要评论。以下是我现在如何做到这一点。
mysql_query("SELECT Comments.* FROM Comments ORDER BY
IF(Comments.orig_comment = 0, Comments.id, Comments.orig_comment)DESC,Comments.id ASC")
此作品获得第一检索(这是我想要什么)的最新评论,但是当涉及到嵌套评论它的最古老的预定他们第一个(不是我所需要)。我需要订购从最新到最旧的主要评论,任何回复也应从最新到最旧排序。我试图没有成功修改我的查询来做到这一点,但无法弄清楚。
作为一个侧面的问题,从系统角度来看,这个系统是否有意义?你是否认为以这种方式排列嵌套评论会令人困惑?我想这样做是因为我的回复按钮位于基本评论上,一旦点击就在基本评论下面添加一个textarea。我只是认为,如果它看起来好像比基本评论低,而不是一直抛到嵌套答复的底部,那么看到你的帖子会更容易。对此有何想法?
也想解决另一个问题,我用它来页面评论。我可以用一个简单的限制只得到评论的x个这样的:
mysql_query("SELECT Comments.* FROM Comments ORDER BY
IF(Comments.orig_comment = 0, Comments.id, Comments.orig_comment)DESC,Comments.id ASC
LIMIT 0, $page")
这种方法显然不注重回复的数量,每个主要的意见。所以我最终要切断对最后主要评论的回复。我只想在orig_comment ='0'时强制执行限制,这样无论评论有多少个回复,它都会显示所有这些回复。我试过
mysql_query("SELECT Comments.* FROM Comments ORDER BY
IF(Comments.orig_comment = 0, Comments.id, Comments.orig_comment)DESC,Comments.id ASC
LIMIT 0, SELECT COUNT(id)FROM Comments WHERE orig_comment='0' LIMIT $page")
虽然这会引发语法错误。
它不应该是Comments.id DESC如果你想与最新的第一个排序? IF不是说按基准降序排列,而是按origin_comment降序排列。你可以使用case语句代替:http:// stackoverflow。com/questions/3550942/can-you-add-if-statement-in-php-mysql-order-by – apelsinapa 2013-03-21 02:35:07
这样做最终将最新的答复放在最前面,没有任何基本评论。我也试图整合来自那篇文章的查询,但是最后我在最前面得到了一个没有基础评论的回复。 – dminicrick1 2013-03-21 02:50:04