gpt4 book ai didi

php - MySQL分层存储: searching through all parent/grandparent/etc.节点给定子节点id?

转载 作者:可可西里 更新时间:2023-11-01 08:55:22 25 4
gpt4 key购买 nike

我正在使用这样的分层模型存储类别:

CATEGORIES
id | parent_id | name
---------------------
1 | 0 | Cars
2 | 0 | Planes
3 | 1 | Hatchbacks
4 | 1 | Convertibles
5 | 2 | Jets
6 | 3 | Peugeot
7 | 3 | BMW
8 | 6 | 206
9 | 6 | 306

然后我使用这些类别 ID 之一存储实际数据,如下所示:

CARS
vehicle_id | category_id | name
-------------------------------
1 | 8 | Really fast silver Peugeot 206
2 | 9 | Really fast silver Peugeot 306
3 | 5 | Really fast Boeing 747
4 | 3 | Another Peugeot but only in Hatchbacks category

在搜索任何此类数据时,我想找到所有子/孙/曾孙等节点。因此,如果有人想查看所有“汽车”,他们会看到 parent_id 为“Hatchbacks”的所有内容,以及 parent_id 为“Peugeot”的所有内容,依此类推,达到任意级别。

因此,如果我列出了 category_id 为 1、3、6 或 8 的“真正快速的 Peugeot 206”,我的查询应该能够“向上移动”树并找到任何更高的类别,即 parent /祖 parent 该子类别的。例如。搜索类别“8”中的 Peugeots 的用户应该会找到任何列有类别 6、3 或 1 的 Peugeots - 所有这些都是类别 8 的后代。

例如使用上述数据,在类别 3 中搜索“Peugeot”实际上应该会找到车辆 1、2 和 4,因为车辆 1 和 2 有一个类别祖先轨迹可以返回到类别 3。看到了吗?

抱歉,如果我没有解释清楚。它很难!不过谢谢你。

注意:我已阅读 the MySQL dev article on hierarchies .

最佳答案

规范化模型很棒,但当您实际需要查询它们时就不行了。

只需将您的类别的“路径”存储在类别表中。像这样: path =/1/3/4 并且当像“select .... where path like '/1/3/%'”这样查询你的数据库时,它将比多层次查询更简单和快速......

关于php - MySQL分层存储: searching through all parent/grandparent/etc.节点给定子节点id?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5749385/

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