gpt4 book ai didi

mysql - 如何在 mySQL 表中表示树结构

转载 作者:可可西里 更新时间:2023-11-01 06:41:57 24 4
gpt4 key购买 nike

树有以下特点:

  1. 每个节点可以有多个父节点和多个子节点。
  2. 一个节点的父节点可以有不同的深度。

示例

我试图表示如下的类别结构:

桌面和移动应用程序

桌面和移动应用程序->Android 应用程序

桌面和移动应用程序->Android 应用程序->游戏

桌面和移动应用程序->Android 应用程序->游戏-> Action

桌面和移动应用程序->游戏

桌面和移动应用程序->游戏-> Action

桌面和移动应用程序->游戏->冒险

桌面应用程序

桌面应用程序->游戏

桌面应用程序->游戏-> Action

桌面应用程序->游戏->冒险

iPhone 应用程序

桌面应用程序->游戏

桌面应用程序->游戏-> Action

桌面应用程序->游戏->冒险

尝试使用嵌套集算法,我最终得到了多个具有不同类别 ID 和不同深度的“游戏”类别。

对此的任何帮助将不胜感激。

最佳答案

简单的方法是构造一个表:

类别
类别ID
家长ID
姓名

你的数据看起来像:

1, 0, '桌面和移动应用程序'
2, 1, '安卓应用'
3, 2, '游戏'
4、3、' Action '
5、1、'游戏'
6、5、' Action '
7, 5, '冒险'

8, 0, '桌面应用程序'
9、8、'游戏'

你会这样查询:select * from Categories where ParentId = 1 这将返回 Android 应用程序和游戏。要获取游戏的子类别,您可以执行 select * from Categories where ParentId = 5 这将返回 Action 和冒险。


更新为了将单个项目与多个类别相关联,您需要一个额外的表格:

外部参照类别项目
分类编号
元素编号

这将允许任何单个项目与多个类别相关联。假设您有一个桌面应用程序,需要同时显示桌面应用程序 > 游戏和桌面和移动应用程序 > 游戏。

您的表格将包含第 1 项的以下数据:
3, 1
9, 1

当查看哪些项目属于特定类别时,您可以执行以下操作:

select I.*
from items I
inner join xref_CategoriesItems XCI on (XCI.ItemId = I.ItemID)
WHERE (XCI.Category = @CategoryId)

要查看特定项目属于哪些类别:

select C.*
from categories C
inner join xref_CategoriesItems XCI on (XCI.CategoryId = C.CategoryId)
where (XCI.ItemId = @ItemId)

如果您需要所有子记录,则查询特定类别下的所有项目会稍微复杂一些。基本上你需要做一个递归连接 xref_categories 与类别来获得 child 。我不记得如何在 MySQL 的 sql 版本中表达它;然而,了解以下内容可能会有所帮助:Using MySQL query to traverse rows to make a recursive tree

关于mysql - 如何在 mySQL 表中表示树结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16697446/

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