好的,我意识到有很多方法可以完成评论。我选择的方式是这样设置的单个表。
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")
这可以首先检索最新的评论(这是我想要的),但是当涉及到嵌套评论时,它会按最旧的优先顺序(不是我需要的)。我需要将主要评论从最新到最旧排序,任何回复也应该从最新到最旧排序。我曾尝试修改我的查询以执行此操作但没有成功,但无法弄清楚。
作为一个附带问题,从可用性的角度来看,这个系统是否有意义?你认为以这种方式排序嵌套评论会令人困惑吗?我想这样做是因为我的回复按钮位于基本评论上,一旦点击就会在基本评论下方添加一个文本区域。我只是认为如果您的帖子也位于基本评论的正下方,而不是一直被扔到嵌套回复的底部,那么它会更容易看到。对此有什么想法吗?
还想解决我使用它来页面评论的另一个问题。我可以使用一个简单的限制来仅获取 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")
但是,这会引发语法错误。