楼中楼回复大家有没有了解的建表方案?

如题所示,最近做毕设中有一个论坛的功能,类似于思否,这样的数据库表是如何存储的呢?

阅读 2.1k
3 个回答

如果要实现,建议区分 comment 和 reply ,不然都放到一个表,到时候膨胀了不好查。

其实就是类似于树形结构就行了,一个典型的树形结构设计类似于这样:

idmessageparent_id
1这是一楼
2这是二楼回复
3这是回复一楼的回复1
4这也是一楼的回复,按id排序会在上一条下面1
5这是回复二楼的回复2

按树形结构展示出来就类似于下面这样了

`-- 这是一楼
    `-- 这是回复一楼的回复
    `-- 这也是一楼的回复,按id排序会在上一条下面
`-- 这是二楼回复
    `-- 这是回复二楼的回复

这种递归查询使用CTE会方便很多,mysql 8.0开始支持,其他主流RDB很早就支持了,mysql CTE查询这种树形结构参考SQL:

WITH RECURSIVE tmp AS
(
  SELECT id, message
    FROM posts
  WHERE parent_id IS NULL
  UNION ALL
  SELECT l.id, l.message
  FROM tmp AS p
  JOIN posts AS l
  ON p.id = l.parent_id
)
SELECT * FROM tmp
ORDER BY id;

思否没有楼中楼。按顺序存就好了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
1 篇内容引用
推荐问题