像这样对表格进行排序的最佳方法是什么:
CREATE TABLE category(
id INT(10),
parent_id INT(10),
name VARCHAR(50)
);
INSERT INTO category (id, parent_id, name) VALUES
(1, 0, 'pizza'), --node 1
(2, 0, 'burger'), --node 2
(3, 0, 'coffee'), --node 3
(4, 1, 'piperoni'), --node 1.1
(5, 1, 'cheese'), --node 1.2
(6, 1, 'vegetariana'), --node 1.3
(7, 5, 'extra cheese'); --node 1.2.1
要通过分级排序,它 的ID 或 名字 :
“比萨饼” //节点1
“piperoni” //节点1.1
“奶酪” //节点1.2
“额外的奶酪” //节点1.2.1
“vegetariana” //节点1.3
“汉堡” //节点2
‘咖啡’//节点3
编辑: 名称 末尾的数字是为了更好地可视化strucutre,而不是用于排序。
编辑2: 正如多次提到的… name
“奶酪 1.2 ”
末尾的数字仅用于可视化目的,而不用于排序。我以评论为由动了他们,太多人感到困惑,抱歉。
通过添加路径列和触发器,可以很容易地做到这一点。
首先添加一个varchar列,其中将包含从根到节点的路径:
ALTER TABLE category ADD path VARCHAR(50) NULL;
然后添加一个触发器来计算插入时的路径:
(只需将新ID与父级路径合并在一起)
CREATE TRIGGER set_path BEFORE INSERT ON category
FOR EACH ROW SET NEW.path =
CONCAT(IFNULL((select path from category where id = NEW.parent_id), '0'), '.', New.id);
然后只需选择按路径排序:
SELECT name, path FROM category ORDER BY path;
结果:
pizza 0.1
piperoni 0.1.4
cheese 0.1.5
extra cheese 0.1.5.7
vegetariana 0.1.6
burger 0.2
coffee 0.3
见小提琴。
这样,维护成本也最小。插入时路径字段是隐藏的,并且是通过触发器计算的。删除节点没有开销,因为该节点的所有子节点也都被删除了。唯一的问题是在更新节点的parent_id时;好吧,不要那样做!:)
我想对二叉树执行级别顺序遍历。因此,对于给定的树,说: 产出将是: 我知道我可以使用某种队列,但在C中递归地实现这一点的算法是什么?感谢您的帮助。
我已经为我的二叉搜索树做了4次不同的遍历。我被困在最后一个,这是水平顺序遍历,我不能得到,似乎找到如何做它正确。 主要的问题是我不知道如何一次只搜索一个层次,我只知道如何搜索整个左或整个右子树。
我在我的应用程序中使用MVVM模式。我有以下(简化版)VM类: 因此,一个Module2601_VM包含几个属性,以及Module2610_VM和ComPort_VM对象的列表。 我有一个MainModule_VM类中Module2601_VM对象的列表。 我想将这个Module2601集合及其子项绑定到树状视图中,并使用以下层次结构: 网关: 网关#0 COM#1 我的问题是,我的层次结构正常,
问题内容: 我有一个表,它表示类别层次结构,层次结构顶部的元素的父ID为0。在CatID列中有超过54K个唯一ID。每个ID可以是另一个ID的父对象。类别深入8个级别。该表如下所示: 这就是我想要实现的结果: 我怎样才能做到这一点?我是否需要某种循环才能遍历所有ID? 有人可以帮忙吗? 问题答案: 这里是:
问题内容: 该表表示类别层次结构,层次结构顶部的元素的父ID为NULL。该表如下所示: 我正在尝试做的是建立一个SQL查询,这将使我返回: 任何给定[categoryId]的[categoryId],[categoryName]链。它应该循环并获取每一行,直到到达具有parentId == NULL的行为止。 如上面的示例示例234-> 91-> 35-> 20-> 1-> NULL(STOP)
问题内容: 假设这张table 我将如何编写简单的CTE(或其他类型的查询),以在任何级别返回它们的父/子关系,但将所有子项的排序顺序保持在父项之下。 基本上,这将是一个简单的树视图,其中的子项目按特定的排序顺序进行排序。 SQL Server 2008是数据库 更新:可以有无限个父级/子级-我尝试了其他堆栈问题/答案中的一些示例,但没有一个在子级中包含排序顺序。 示例结果应为: 等等。 希望这是