gpt4 book ai didi

mysql - SQL(Mysql)中的树状数据整理

转载 作者:行者123 更新时间:2023-11-29 05:11:02 26 4
gpt4 key购买 nike

我的数据库中有两个表

Table A with columns user_id, free_data, used_data
Table B with columns donor_id, receptor_id, share_data

基本上,用户(假设为 x)在他的帐户中有一些数据,这些数据由他在表 A 中的条目表示。数据存储在 free_data 列中。他可以向任何其他用户捐赠数据(假设为 y),这将显示为表 B 中的一个条目。相同数量的数据将从用户 x free_data 列中扣除。

创建表 B 中的条目时,也会为用户 y 创建表 A 中的条目,其 free_data 值等于 share_data。现在用户 y 可以向用户 z 赠送数据并且该过程继续。

每个用户都在使用他们的数据,表 A 中的条目 used_data 不断累加以指示每个用户使用了多少数据。

这就像一个树结构,其中有一个包含所有数据的条目(根节点)最终将数据提供给其他人,而其他人又将数据提供给其他节点。

现在我想编写一个 sql 查询,这样,给定一个节点 x(表 A 中条目的 ID),我应该能够总结 x 给出的总数据以及谁都是多层次的受益人,所有他们的 used_data 需要根据 x 进行整理和显示。

基本上就是想整理一下

  1. x 捐赠的总数据。
  2. x 捐赠的数据中有多少已用完。

虽然实现更像图形,但我更感兴趣的是,如果我们假设它是节点 x 下的一棵树,并且可以提出单个 sql 查询来获取我需要的数据。

例子

Table A
user_id, free_data, used_data
1 50 10
2 30 20
3 20 20

Table B
donor_id, receptor_id, share_data
1 2 30
1 3 20

Total data donated by 1 - 30 + 20 = 50
Total donated data used - 20 + 20 = 40

这只是 1 捐赠给 2 和 3 的一个级别。2 又可以捐赠给 4 & 所有需要以冒泡方式整理的数据,以计算捐赠数据的总体使用情况。

最佳答案

是的,可以使用嵌套集模型。乔·塞尔科 (Joe Celko) 的一本书描述了这一点,但如果您想直接进入,可以找到 article那就是在谈论它。您需要的两个整理数据都可以通过单个选择语句检索,如下所示:

SELECT * FROM TableB where left > some_value1 and right < some_value2

enter image description here

在上面的示例中,要获取“Portable Electronics”的所有子节点,查询将是:

SELECT * FROM Electronics WHERE `left` > 10 and `right` < 19

文章描述了应该如何初始化左右列。

关于mysql - SQL(Mysql)中的树状数据整理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39278551/

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