mysql - 如何有效地将动态文本保存到数据库中?
问题描述
我有这种文本并想将其保存到数据库:
I. Master Text I <<<Parent
I.A. Sub Master Text I <<<Child
I.A.1. Sub Sub Master Text I <<<Child Child
I.A.1.a Sub Sub Sub Master Text I - Row 1 <<<Child Child Child 1
I.A.1.b Sub Sub Sub Master Text I - Row 2 <<<Child Child Child 2
I.A.1.c Sub Sub Sub Master Text I - Row 3 <<<Child Child Child 3
II. Master Text II
II.A. Sub Master Text II
II.A.1. Sub Sub Master Text II
II.A.1.a Sub Sub Sub Master Text II - Row 1
II.A.2. Sub Sub Master Text II
II.A.2.a Sub Sub Sub Master Text II - Row 1
II.A.2.b Sub Sub Sub Master Text II - Row 2
III. Master Text III
III.A. Sub Master Text III
III.A.1. Sub Sub Master Text III
III.A.1.a Sub Sub Sub Master Text III - Row 1
III.A.1.b Sub Sub Sub Master Text III - Row 2
III.A.1.c Sub Sub Sub Master Text III - Row 3
III.B. Sub Master Text III
如何有效地保存这些文本?总是有一个Parent
,但数量Child
是非常动态的。child
我无法预测会有多少。
我目前使用的是传统的Master Table
,Detail Table
但我必须定义第一个的数量Detail Table
。因此,对于这种文本来说,它是不可靠的。
我的主要问题是,如何将这些文本(带有 n 个子项)有效地保存到数据库中并像示例中一样轻松显示?
解决方案
这是“分层数据”主题。我建议您查看这个精彩的演示文稿并选择最适合您的方式。
但是 MySql 8 支持递归with子句,所以你可以使用这样的东西:
CREATE TABLE `texts` (
`id` INT NOT NULL,
`text` TEXT NULL,
`parent_id` INT NULL,
PRIMARY KEY (`id`));
以及选择遵循第一棵树的子项目的示例:
with recursive cte (id, text, parent_id) as (
select id,
text,
parent_id
from texts
where parent_id = 1
union all
select p.id,
p.text,
p.parent_id
from texts p
inner join cte
on p.parent_id = cte.id
)
select * from cte;
在这里,您可以找到有关旧版本的 with 子句和类似物的绝佳答案。
推荐阅读
- r - 将 scale_colour 和 scale_fill 结合在同一个函数中
- react-native - React Native:错误[TypeError:null不是对象(评估'WebRTCModule.peerConnectionInit')]
- python - 试图缩短我的 python 代码。有人有想法吗?
- vba - VBA Pivot 过滤器在每个过滤器项上重新计算表 - 如何避免这种情况?
- mysql - 如何获得取决于数据馈送的不同值的特定值?
- ios - 如何从 UITableViewCell 中加载 UITableView?
- ruby-on-rails - 将 ActiveStorage 资产从一个 S3 存储桶迁移到另一个
- ios - UIActivityViewController 将图像保存到照片库,但使用 false 调用其完成处理程序
- r - 累计值 CI
- android - 如何在 jetpack compose 中传递来自 Firestore 的查询的参数