说说,博客,贴吧评论设计问题
来源:互联网 发布:眉毛黄金比例数据 编辑:程序博客网 时间:2024/06/04 17:55
说说,博客,贴吧的评论都是可以无限评论的,也就是说,你根本不知道一共有多少层,如果要设计这么一个结构,怎么保存数据,查询显示数据呢?
– – 创建说说表
– create table saysay(
– id int unsigned auto_increment primary key,
– owner varchar(20) not null,
– sendtime datetime,
– content text
– );
评论表(comments)
id:主键、无意义(id 为0 代表一级评论)
owner:该评论的发出者
toname: 该评论是回复哪个人的
sendtime:评论的时间
content:评论的内容
ssid:是哪条说说的下面的评论
pid:一级评论的id
我们可以这样考虑,先按ssid,从数据库中查出该条说说的所有相关评论,然后在对这些说说进行分层,得到每条评论具体是评论哪个内容的,就是在说说里面放一个评论的list(对应直接评论),在每个评论里面又放一个list(回复该评论的评论),如果list为空,那么就结束了。
下面我写了一个demo,简化版的,但是原理类似:
public class Main { public static void main(String[] args) { // *表示一级评论 *-*表示二级评论 *-*-*表示三级评论 *-*-*-*表示四级评论 List<Context> list = new ArrayList<>(Arrays.asList( new Context("", "1"),new Context("", "2"), new Context("", "3"), new Context("1", "1-1.1"), new Context("1", "1-1.3"), new Context("1", "1-1.4"), new Context("1-1.1", "1-1.1-1.1.1"), new Context("1-1.1", "1-1.1-1.1.5"), new Context("2", "2-2.1"), new Context("2-2.1", "2-2.1-2.1.2"), new Context("3", "3-3.1"), new Context("3", "3-3.2"), new Context("3-3.2", "3-3.2-3.2.2"), new Context("3-3.2-3.2.2", "3-3.2-3.2.2-3.2.2.2"))); List<Context> resultList = getContextList(list); resultList.forEach(System.out::println); } private static List<Context> getContextList(List<Context> list) { List<Context> resultList = new LinkedList<>(); list.forEach(x -> { if (x.getBefore().equals("")) { resultList.add(new Context(x, list)); } }); return resultList; }}class Context { private String before;//上一级 private String value;//当前 private List<Context> list = new LinkedList<>(); Context(String before, String value) { this.before = before; this.value = value; } Context(Context context, List<Context> contextList) { this.before = context.getBefore(); this.value = context.getValue(); contextList.forEach(x -> { if (x.getBefore().equals(value)) { list.add(new Context(x, contextList)); } }); } public String getValue() { return value; } public void setValue(String value) { this.value = value; } public List<Context> getList() { return list; } public void setList(List<Context> list) { this.list = list; } public String getBefore() { return before; } public void setBefore(String before) { this.before = before; } @Override public String toString() { return value + (list.size() == 0 ? "" : ":" + list); }}
结果:
1:[1-1.1:[1-1.1-1.1.1, 1-1.1-1.1.5], 1-1.3, 1-1.4]2:[2-2.1:[2-2.1-2.1.1, 2-2.1-2.1.2]]3:[3-3.1, 3-3.2:[3-3.2-3.2.2:[3-3.2-3.2.2-3.2.2.2]]]
可以发现,已经达到了预期的效果。
阅读全文
0 0
- 说说,博客,贴吧评论设计问题
- 评论表 设计问题
- 评论问题
- 没有评论的博客
- 评论博客声明
- 也说说第一博客
- 说说程序员与博客
- 说说程序员与博客
- 第一次博客,随便说说。
- 说说程序员与博客
- 看到一片评论文章,忍不住说说
- QQ空间触屏版说说模拟评论
- 匿名项目连载(四)--->评论说说
- 设计博客页面的问题!
- 第一次的博客,说说我的工作吧!
- Atitit qzone qq空间博客自动点赞与评论工具的设计与实现
- 评论设计表
- 多级评论数据表设计
- SFC简单修改教程
- 使用Proguard进行代码混淆
- Python 重访类型分类
- SDL编程
- 每天一个linux命令(30): chown命令
- 说说,博客,贴吧评论设计问题
- 【重磅】吴恩达又一项目Landing.ai曝光,这一次,他是要给传统制造业狠狠开刀!
- 【重磅】工业和信息化部发布《促进新一代人工智能产业发展三年行动计划(2018-2020年)》
- 【Person Re-ID】Margin Sample Mining Loss: A Deep Learning Based Method for Person Re-identification
- 一看你就懂,超详细java中的ClassLoader详解【转】
- 涨停板套利,风险极大
- java类加载机制
- eclipse配置文件导出,并给新工作空间使用
- Hibernate 核心技术(三)