什么是排序像这样的表的最佳方法:为了SQL树层次
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”末尾的数字只是为了可视化目的,而不是为排序。我将他们作为评论移动,太多人感到困惑,抱歉。
Oracle有一种方法可以通过'START WITH parent_id = 0 CONNECT BY PRIOR id = parent_id ORDER SIBLINGS BY id ASC'来完成。我认为MySQL没有这样的分层查询。 – Benoit 2013-02-15 07:53:40
@Benoit:实际上几乎所有的DBMS *除少数(包括MySQL)*之外都可以使用递归公用表表达式来做类似的事情。 – 2013-02-15 09:01:25
是已经定义的tabel结构还是您正在规划阶段并可以选择其他结构?你打算在桌上有多少个参赛作品?它经常被修改,还是对它有许多读取权限很重要? – 2013-02-19 08:34:19