实现类似QQ空间,微信聊天风格的回帖评论
2. sql表设计
CREATE TABLE `comments` (
`comment_id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`theme_id` INT(10) UNSIGNED NOT NULL,
`user_id` INT(10) UNSIGNED NOT NULL,
`to_user_id` INT(10) UNSIGNED NOT NULL,
`pid` INT(10) UNSIGNED NOT NULL,
`num_like` INT(10) UNSIGNED NOT NULL,
`commentable_id` INT(10) UNSIGNED NOT NULL,
`commentable_type` VARCHAR(50) NOT NULL COLLATE 'utf8mb4_unicode_ci',
`is_del` TINYINT(4) NOT NULL,
`created_at` TIMESTAMP NULL DEFAULT NULL,
`updated_at` TIMESTAMP NULL DEFAULT NULL,
PRIMARY KEY (`comment_id`)
)
COLLATE='utf8mb4_unicode_ci'
ENGINE=MyISAM;
3. 数据表介绍
comment_id 评论ID 主键 自增ID
theme_id 主题ID
user_id 发布评论的用户ID
to_user_id 回复用户的ID
pid 评论的父ID
num_like 点赞数
commentable_id 来源表ID
commentable_type 来源表
is_del 是否删除
关联关系:帖子下面有评论,一级评论算一个主题,二级、三级等。。算主题的普通评论
theme_id 和 pid 关系
当用户发布评论级别(level)为一时,theme_id和pid默认为0
当用户针对别的用户的评论(A)进行评论生成评论(B)时,
评论(B)pid为A评论的comment_id
评论(B)theme_id为A评论的theme_id,如果theme_id为0,那么为A评论的comment_id
4. 查询帖子所有评论并进行格式化(分两步)
4.1 查询帖子下所有评论(查询帖子一级评论)
根据commentable_id和commentable_type确定具体的帖子
按照theme_id=0(查找到一级评论)
按照时间排序
4.2 查询主题下的所有子评论
按照是否删除查找
按照主题查找(查找同一个主题下所有评论)
按照pid查找(按照pid排序)
按照时间查找(按照created_at排序)
网友评论