一,问题描述
设计一个帖子,帖子有评论和回复功能。根据网上及自己的一个思考,设计两张表用来记录评论和回复。
comment 表:
comment_reply 表:
二,尝试解决方案
三,预期效果
能够实现类似以下的查询结果
此结果来源于:原文链接
四,测试表及数据
commment 表
CREATE TABLE `comment` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`topic_id` int(10) unsigned DEFAULT NULL COMMENT '主题id',
`topic_type` tinyint(2) unsigned NOT NULL DEFAULT '1' COMMENT '1为课程,2为集会,3为商品',
`content` text COMMENT '评论内容',
`from_uid` int(10) unsigned DEFAULT NULL COMMENT '评论者id,一般为会员表的id',
`nickname` varchar(60) DEFAULT NULL COMMENT '冗余用户昵称',
`thumb_img` varchar(255) DEFAULT NULL COMMENT '冗余用户头像',
`is_top` tinyint(2) unsigned NOT NULL DEFAULT '0' COMMENT '是否置顶评论,1为置顶,0为不置顶',
`is_hot` tinyint(2) unsigned NOT NULL DEFAULT '0' COMMENT '是否为热评,1为热评',
`like_num` int(5) unsigned DEFAULT '0' COMMENT '评论被点赞的次数',
`reply_num` int(5) unsigned DEFAULT '0' COMMENT '评论被回复的次数',
`is_reply` tinyint(2) unsigned DEFAULT '0' COMMENT '是否回复',
`status` tinyint(2) unsigned NOT NULL COMMENT '评论状态,-1为删除,0为待审核,1为已发布',
`create_time` int(11) unsigned DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`id`),
KEY `topic_id` (`topic_id`) USING BTREE,
KEY `topic_type` (`topic_type`) USING BTREE,
KEY `from_id` (`from_uid`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8
INSERT INTO `dino_comment` VALUES (3, 4, 1, '第二条评论呗', 11, 'XXX', '', 0, 0, 0, 0, 0, 0, 1500797019);
INSERT INTO `dino_comment` VALUES (5, 4, 1, '我是的是的收到', 11, 'xxx', '', 0, 0, 0, 0, 0, 0, 1500898572);
comment_reply 表
Create Table
CREATE TABLE `comment_reply` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`comment_id` int(10) unsigned DEFAULT NULL COMMENT '评论id',
`reply_type` tinyint(2) unsigned DEFAULT '1' COMMENT '1为回复评论,2为回复别人的回复',
`reply_id` int(10) unsigned DEFAULT NULL COMMENT '回复目标id,reply_type为1时,是comment_id,reply_type为2时为回复表的id',
`content` text CHARACTER SET utf8 COMMENT '回复内容',
`to_uid` int(10) unsigned DEFAULT NULL COMMENT '回复目标id',
`from_uid` int(10) unsigned DEFAULT NULL COMMENT '回复用户id',
`from_thumb_img` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '回复者的头像',
`from_nickname` varchar(50) CHARACTER SET utf8 DEFAULT NULL COMMENT '回复者的昵称',
`create_time` int(11) unsigned DEFAULT NULL COMMENT '评论时间',
`to_nickname` varchar(50) CHARACTER SET utf8 DEFAULT NULL COMMENT '冗余回复对象的昵称',
`is_author` tinyint(2) unsigned DEFAULT NULL COMMENT '0为普通回复,1为后台管理员回复',
PRIMARY KEY (`id`),
KEY `comment_id` (`comment_id`) USING BTREE,
KEY `from_uid` (`from_uid`) USING BTREE,
KEY `to_uid` (`to_uid`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8
INSERT INTO comment_reply` VALUES (8, 5, 1, 5, '好的,谢谢你支持', NULL, 1, NULL, '讲师', 1500898622, NULL, 1);
INSERT INTO comment_reply` VALUES (9, 5, 1, 5, '还有什么问题吗', NULL, 1, NULL, '讲师', 1500898683, NULL, 1);
求求各路大神指点迷津!!谢谢
首先comment 一个ID 为xxx,再去comment_reply找回复评论的,reply_id 和reply_type=1,找到后再找每个回复评论下的 回复 reply_id和reply_type=2,一直for循环下去,查到就插入nodes下面