gpt4 book ai didi

mysql - 如何设计满足以下需求的表格?

转载 作者:行者123 更新时间:2023-11-29 01:47:57 25 4
gpt4 key购买 nike

我有以下需求。

父子映射表

ID ParentID ChildID

1 1 2

2 1 3

3 2 4

3 2 5

3 4 6

主表

ID  ViewCount

1 3
2 4
3 4
4 5
5 6

父项和子项出现在同一个表中,并有自己的观看次数。

当我阅读任何记录时,它必须获取特定记录的浏览量以及他们 child 的浏览量。

我只更新了特定记录的浏览量,没有更新他们的 parent 。

所以从主表中,当我访问 ID 为 1 的记录时,它必须获取他们所有 child 的观看次数和它自己的观看次数。对于这种情况 22。

当我访问 2 时,观看次数为 15。没有级别,它会根据 child 增长。

如何编写查询或重新设计表或其他内容

实现上述要求?

主表中的 ID 列同时引用父 ID 和子 ID 及其主键。在映射表中,我们正在映射父子关系。父/子表中存在的ID是表的主键字段。正确没有使用该字段

最佳答案

您拥有的结构(父/子)称为邻接列表。获取一个节点及其所有子节点(例如对它们的 ViewCount 求和需要递归。不要屏住呼吸等待 MySQL 实现它:http://bugs.mysql.com/bug.php?id=16244。SQL 标准功能 CTE 是大多数主要 SQL 数据库(PostgreSQL、DB2、MS SQL Server,可能是最近的 Oracle)使用几乎相同的语法实现;Oracle 有一个 CONNECT BY/PRIOR。

还有其他一些树的编码可以不用递归查询,但它们比邻接表要复杂一些。谷歌“sql 嵌套间隔”,或阅读 Vadim Tropashko的书

哦,顺便说一句,父/子表中的合成 id 列是糟糕的设计,因为它允许您拥有重复数据。放下它,并在真正属于那里的两列上创建主键。

关于mysql - 如何设计满足以下需求的表格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1945492/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com