在下面的查詢中有一個名爲main
的字段,用於區分這些類別。 因此,常見的類別和主要類別都可以在樹上找到。 main
字段只是一種類型,沒有樹結構,我的意思是,它就像一個狀態字段。如何更改爲樹遍歷(嵌套集)創建的CROSS JOIN SQL?
SELECT `c`.*,
(count(p.id)-1) AS `depth`
FROM `categories` AS `c`
CROSS JOIN `categories` AS `p`
WHERE (c.lft BETWEEN p.lft AND p.rht)
AND (c.root_id =p.root_id)
AND (p.main =1)
GROUP BY `c`.`id`
ORDER BY `c`.`root_id` ASC, `c`.`lft` ASC
有一個where
clausule其指定的父類需要一個主類。此外,有時我需要做一個select
其中父類別是一個共同的類別p.main =0
。
depth
是元素在樹中的位置。所以如果一個類別是另一個級別的孩子,深度將是1
,如果兩個級別,深度將是2
。
我的問題是,當我做的選擇上面,如果有孩子打上一棵樹,其中父親(選擇p.main =1
)普通類depth
總是0
主要類別爲普通類。
換句話說,如果我選擇的所有類別的頂級父標記爲main
,它會顯示樹的所有類別,包括標記爲main=0
的子類別。但是,在這種情況下,深度總是0
查看結果:
類別1423
是27
一個孩子,是不是一個主要類別,但27
是,這樣的深度是0
,但需要是1
。類別276
是64
的子項,它們都是主要類別,因此它具有正確的深度。
如何更改此查詢,以便depth
字段按預期工作?
參考這裏:How to generate a tree view from this result set based on Tree Traversal Algorithm?
單詞「嵌套集」在這裏會有所幫助。 – ijw 2010-12-06 20:04:56
@ijw changed ... – 2010-12-06 21:02:08