当前位置: 首页 > article >正文

评论表设计与实现(多级评论)

  1. 首先分析评论的类型
    在这里插入图片描述
    1. 对文章的回复(也称根回复或一级回复)
    2. 对根评论的回复 (二级回复,被回复的评论id和根评论相同)
    3. 对回复的回复(二级回复,被回复的评论id和根评论不同)
  2. 抽象出数据库结构
CREATE TABLE `article_comments` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '主键',
  `article_id` int DEFAULT NULL COMMENT '文章ID',
  `user_id` int DEFAULT NULL COMMENT '评论者ID',
  `comment_content` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '评论内容',
  `like_count` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '评论喜欢数、点赞数',
  `comment_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '回复类型: 0 针对文章的回复  1 针对评论的回复',
  `reply_user_id` int DEFAULT NULL COMMENT '被回复的评论用户ID,comment_type为1时有效',
  `reply_comment_id` int DEFAULT NULL COMMENT '被回复的评论ID,comment_type为1时有效',
  `comment_date` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '评论发表时间',
  `comment_ip` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '评论发表时 IP 地址',
  `root_comment_id` int DEFAULT NULL COMMENT '根评论id,comment_type为1时有效',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
  1. 各类评论的查询sql
# 对文章的回复 (article_id=1)
SELECT * FROM `article_comments` WHERE article_id=1 and comment_type=0

# 对评论的回复 (article_id=1 , root_comment_id=1)
SELECT * FROM `article_comments` WHERE article_id=1 and comment_type=1 and root_comment_id=1

# 对根评论的回复 (article_id=1 , root_comment_id=1)
SELECT * FROM `article_comments` WHERE article_id=1 and comment_type=1 and root_comment_id=1 and root_comment_id=reply_comment_id 

# 对回复的回复 (article_id=1 , root_comment_id=1)
SELECT * FROM `article_comments` WHERE article_id=1 and comment_type=1 and root_comment_id=1 and root_comment_id != reply_comment_id 

http://www.kler.cn/news/318568.html

相关文章:

  • JS的基础语法
  • 在Java中如何利用ClassLoader动态加密、解密Class文件
  • 文本合成语音api接口文档
  • 华为HarmonyOS灵活高效的消息推送服务(Push Kit) -- 10 推送实况窗消息
  • WebGL动画与交互
  • Tableau|二 如何利用功能区创建视图
  • 冒泡排序原理及python代码
  • 需求导向的正则表达式
  • 公安局软件管理平台建设方案和必要性,论文-2-———未来之窗行业应用跨平台架构
  • 2.AFIO 外设:复用和重映射
  • 调试vue build之后的js文件
  • Craft:年度 Mac 应用,卡片式笔记新星
  • 在 Qt 中实现 `QListWidget` 列表项水平居中显示
  • 网关基础知识
  • 线性判别分析(LDA)中求协方差矩阵示例
  • 配置文件--UmiJs
  • 用Flutter几年了,Flutter每个版本有什么区别?
  • 深入理解前端拖拽:从基础实现到事件冒泡与委托的应用【面试真题】
  • MySQL Performance Schema 详解及运行时配置优化
  • mac-m1安装nvm,docker,miniconda
  • 【shell脚本5】Shell脚本学习--条件控制
  • MyBatis与 Springboot 的集成
  • 【Webpack】使用 Webpack 和 LocalStorage 实现静态资源的离线缓存
  • ubuntu24.04 怎么调整swap分区的大小,调整为16G
  • Spark 任务与 Spark Streaming 任务的差异详解
  • Java毕业设计 基于SpringBoot和Vue自习室管理系统
  • Mybatis-为什么使用Mybatis,它存在哪些优点和缺点?
  • 【后端开发】JavaEE初阶—线程安全问题与加锁原理(超详解)
  • 专业学习|随机规划概观(内涵、分类以及例题分析)
  • Java基础|多线程:多线程分页拉取