数据库结构:
CREATE TABLE IF NOT EXISTS `Blog`.`comments` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '评论ID',
`content` TEXT NOT NULL COMMENT '评论内容',
`create_time` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '评论时间',
`author` VARCHAR(45) NOT NULL DEFAULT '' COMMENT '作者名称',
`ip` VARCHAR(100) NOT NULL DEFAULT '' COMMENT 'IP',
`url` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '网址',
`email` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '邮箱',
`agent` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '浏览器信息',
`parent_id` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '父级ID',
`status` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '状态',
`article_id` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '评论的文章ID',
PRIMARY KEY (`id`),
INDEX `fk_article_comments_article1_idx` (`article_id` ASC))
ENGINE = MyISAM
COMMENT = '文章评论表';
相应文章的评论读出来以后,我用的递归把评论展示出来。
但是现在有个问题,比如我一页显示10个评论,要显示第一页,我现在把顶级评论读出来了,但是这些评论下的回复怎么查最优呢?(因为回复可能有很多级,所以我现在递归查询数据库已经。。。咳咳)
如果使用3个 id 呢, 一个是回复对象(上级回复) id, 一个是文章 id, 一个是顶级回复 id 呢, 这样可以用顶级回复 id 一次性去取全部的, 再根据时间排序好楼层, 还需要一个字段标记不是回复别人而是直接评论文章, 加入这个条件来分页
其实不建议盖那么多楼层, 一次就好, 想 sf 这样, 评论都在现在, 使用 @xxx 的方式就好, 当然直观性不如盖楼
也会引发出一些问题, 比如中间楼层被管理员删除等...