【发布时间】:2020-05-28 19:36:43
【问题描述】:
我有一个数据库表名“类别”,并具有以下属性:
- 身份证
- parent_id
- 代码
- 姓名
样本数据:
[1][null][0][category 1]
[2][null][1][category 2]
[3][null][2][category 3]
[4][null][3][category 4]
[5][3][4][category 5]
[6][null][5][category 6]
[7][5][0][category 7]
[8][null][1][category 8]
[9][7][2][category 9]
[10][null][3][category 10]
[11][null][4][category 11]
[12][null][5][category 12]
类别表就像一棵树或节点。它可以有不同的层次。
对于示例数据,类别 9 是类别 7 的子类别。类别 7 是类别 5 的子类别。类别 5 是类别 3 的子类别。
所以你可以把这个类别想象成树或节点。
类别 3 > 类别 5 > 类别 7 > 类别 9
所以第 9 类是第 4 级。
所以我的问题是,如何获得最高级别,以便预期结果为 4。
【问题讨论】:
-
到目前为止你有没有尝试过?如果它是一个小表,最好将它全部读入内存并从那里计算出来,而不是多次 SQL 调用。
-
其实这只是我任务的一部分。我只需要获得递归的最大级别,然后我将循环类别表取决于级别。所以如果我得到 4 的结果,那么我将循环 4 次这个类别表来获取父类别 id
-
如果您需要再次读取数据,那么我会认为将数据放在内存中会更好。为什么要继续返回数据库和更多 SQL 语句的开销?
-
然后例如我有一个 100 类别,其中一些可能有不同的级别。所以你的意思是我会在后端循环它然后避免这个到sql?
-
递归 CTE 最适合这类问题
标签: php sql sql-server laravel