免费无版权图片素材网站杭州商城型网站建设
这里的多级,本质上其实也就二级,例如微博的评论,
一级评论: 对微博的评论
二级评论: 对微博下的评论的回复评论 ,这里包括二种 1. 回复的是一级评论, 2, 回复的是二级评论
效果如下

表数据

查询文章评论时:
SELECT * from comment where article_id = '1' and comment_level = 1 ORDER BY top_status desc ,create_time desc 
结果:
1 aaa 张三 1 标题党 1 一级评论(评论文章) 1 0 0 2019-04-26 17:37:48
查看评论下的回复时:
SELECT * from comment where parent_comment_id = '1' and article_id = '1' and comment_level = 2 ORDER BY create_time desc
结果:
3    aaa    张三    1    标题党    1    aaa    2    bbb    2    回复二级评论    1    0    0    2019-04-26 17:40:04
 2    bbb    李四    1    标题党    1    aaa            2    回复一级评论    1    0    0    2019-04-26 17:38:53
上面查询评论都是按照时间 create_time 倒叙,如果要改成微博的那种按照热度的 或者点赞量的
只需要把create_time 改成 praise_num
-----------------------------------------------------------------------表结构如下--------------------------------------------------------------------------------------------
id               评论id  可以设置为自增主键 也可设置为uuid
 user_id       评论人userId
 user_name  评论人昵称 ,记录当时评论的时候用户的昵称,如果用户昵称修改,评论展示也变的话 不需要设置该字段
 article_id     在哪篇篇文章下评论的
 article_title  文章标题,记录当时评论的时候文章标题,查看我的评论或者 评论我的时,文章动态获取的话 不需要设置该字段
 parent_comment_id  父级评论id
 parent_comment_user_id 父级评论的userid
 reply_comment_id   被回复的评论id
 reply_comment_user_id 被回复的评论的userid
 comment_level  评论级别 ,回复文章的是一级评论 ,其它的都是二级评论
 content  评论内容
 status  评论状态,评论被删除了  都是 逻辑删除,不会真实删除
 praise_num  评论的点赞数量
 top_status  评论是否置顶
 create_time  评论创建时间
 表结构为

CREATE TABLE `comment` (`id` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '评论id',`user_id` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '评论人userId',`user_name` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '评论人名称',`article_id` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '评论的文章id',`article_title` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '评论的文章标题',`parent_comment_id` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '父评论id',`parent_comment_user_id` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '父评论的用户id',`reply_comment_id` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '被回复的评论id',`reply_comment_user_id` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '被回复的评论用户id',`comment_level` tinyint(4) NOT NULL DEFAULT '1' COMMENT '评论等级[ 1 一级评论 默认 ,2 二级评论]',`content` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '评论的内容',`status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '状态 (1 有效,0 逻辑删除)',`praise_num` int(11) NOT NULL DEFAULT '0' COMMENT '点赞数',`top_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '置顶状态[ 1 置顶,0 不置顶 默认 ]',`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',PRIMARY KEY (`id`),KEY `idx_article_id` (`article_id`) USING BTREE,KEY `idx_user_id` (`user_id`) USING BTREE,KEY `idx_create_time` (`create_time`),KEY `idx_parent_comment_id` (`parent_comment_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='文章评论表'; 
1. 编码设置为 utf8mb4 是为了支持 emoji 标签
2. id 根据需求可以设置为自增 或者 uuid
3. user_name 字段 和 article_name 字段 根据需要来是否设置为表字段。如果为表字段 就不用连表查询,但是 记录的都是当时评论的时候的用户名和 文章标题。 好在用户昵称和文章标题变化 但是 对应的 id 是不变的,也可以关联查询到。
4. 文章id ,用户id 创建时间,父评论id 设置索引 在查询时都能有效利用索引
5. 评论删除功能,其实都不是 真实物理删除,只是设置不可见,(支持消息中心以及 我的评论 )
  
