2014-01-17 34 views
0

我試過在過去後發表評論,但不允許不足夠的代表:(如何從一組嵌套表中的每個節點的深度,其中有重複的節點名稱

我要找。幫助把我的修改序樹遍歷表成

<ul> <li> 

菜單使用PHP

我已經看到了這一點:

Getting a modified preorder tree traversal model (nested set) into a <ul>

..它幾乎回答了我需要知道的一切......除了一個問題。我的表中的項目並不是唯一命名的,因爲相同的菜單項可以出現在不同的父項下(在這種情況下,在不同「類型」文檔下的相同部門名稱)。 - 當我運行SQL代碼時:

SELECT node.name, (COUNT(parent.name) - 1) AS depth 
FROM menu AS node 
CROSS JOIN menu AS parent 
WHERE node.lft BETWEEN parent.lft AND parent.rgt 
GROUP BY node.name 
ORDER BY node.lft 

'管理員',這是一個菜單名稱的例子使用兩次,獲得其'深度'級別加在一起(3和2),並顯示爲5 ..這當然會弄糟它的定位,只顯示它。當談到創建菜單一旦

這裏是我的SQL表:

CREATE TABLE `menu` (
`id` int(11) NOT NULL AUTO_INCREMENT, 
`name` varchar(100) NOT NULL, 
`lft` int(11) NOT NULL, 
`rgt` int(11) NOT NULL, 
PRIMARY KEY (`id`), 
) 

INSERT INTO `menu` (`id`, `name`, `lft`, `rgt`) VALUES 
(21, 'root', 1, 30), 
(39, 'Forms', 2, 11), 
(40, 'Admin', 3, 6), 
(56, 'Domcare', 7, 8), 
(58, 'MIS', 9, 10), 
(59, 'Documents', 12, 21), 
(60, 'Residential', 15, 20), 
(61, 'Guides', 22, 29), 
(62, 'Hardware', 23, 28), 
(63, 'Hosting', 24, 25), 
(64, 'Installation', 26, 27), 
(65, 'Absence', 4, 5), 
(67, 'Admin', 13, 14); 

任何幫助,將不勝感激!

回答

2

可以GROUP BY唯一ID:

SELECT node.name, (COUNT(parent.name) - 1) AS depth 
FROM menu AS node 
CROSS JOIN menu AS parent 
WHERE node.lft BETWEEN parent.lft AND parent.rgt 
GROUP BY node.id 
ORDER BY node.lft 

見我的小提琴這裏:SQL Fiddle

+0

太好了!謝謝..當你知道一些SQL時很容易......我真的不知道!呵呵..非常感謝! :) –

相關問題