如题所示,最近做毕设中有一个论坛的功能,类似于思否,这样的数据库表是如何存储的呢?
其实就是类似于树形结构就行了,一个典型的树形结构设计类似于这样:
id | message | parent_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;
15 回答8.4k 阅读
8 回答6.2k 阅读
4 回答4.4k 阅读✓ 已解决
5 回答3.2k 阅读✓ 已解决
4 回答4k 阅读
1 回答3k 阅读✓ 已解决
3 回答3.6k 阅读✓ 已解决
如果要实现,建议区分 comment 和 reply ,不然都放到一个表,到时候膨胀了不好查。