模仿segmentfault 评论

实现核心功能,包括数据库设计,java代码编写。

使用 @用户 评论方法,避免了多重循环嵌套方式。

微博、思否就是用这种评论方式。

效果图:

微博(评论时间倒叙,从下向上看):

思否

数据库设计:

涉及到三张表:

评论表 ↓

CREATE TABLE `pm_comment` (
  `id` varchar(30) NOT NULL,
  `pid` varchar(30) DEFAULT NULL,
  `pictureid` varchar(30) DEFAULT NULL,
  `userid` varchar(32) DEFAULT NULL COMMENT '评论用户id',
  `beicommentuserid` varchar(32) DEFAULT NULL COMMENT '被评论用户id,如果添加根节点评论,则为空',
  `commenttime` datetime DEFAULT NULL,
  `isrelease` int(11) DEFAULT '1',
  `isdel` int(11) DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

评论内容表 ↓

CREATE TABLE `pm_commentcontent` (
  `id` varchar(32) NOT NULL DEFAULT '',
  `commentid` varchar(30) NOT NULL,
  `commentcontent` varchar(500) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

用户表 ↓

CREATE TABLE `pm_user` (
  `id` varchar(30) NOT NULL,
  `account` varchar(20) NOT NULL,
  `password` varchar(40) NOT NULL,
  `nickname` varchar(20) DEFAULT NULL,
  `avatar` varchar(200) DEFAULT NULL,
  `gender` varchar(10) NOT NULL,
  `phonenumber` varchar(11) NOT NULL,
  `email` varchar(50) NOT NULL,
  `createtime` datetime NOT NULL,
  `updatetime` datetime DEFAULT NULL,
  `isdel` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

 

关联查询出评论记录:

SELECT
	pc.id,
	pc.pid,
	pc.pictureid,
	pc.userid,
	pu.account AS username,
	pc.beicommentuserid,
	pus.account AS beicommentusername,
	pc.commenttime,
	pc.isrelease,
	pc.isdel,
	pcc.commentcontent AS commentcontent
FROM
	pm_comment AS pc
INNER JOIN pm_commentcontent AS pcc ON pc.id = pcc.commentid
INNER JOIN pm_user AS pu ON pc.userid = pu.id
LEFT JOIN pm_user AS pus ON pc.beicommentuserid = pus.id
WHERE
	pc.pictureid = '176476335496474624'
-- AND pc.pid = '0'
ORDER BY
	pc.commenttime DESC

查询结果 ↓

 

posted on 2018-05-11 17:34  ultrastrong  阅读(472)  评论(0编辑  收藏  举报