2011-09-29 73 views
2

我的產品和類別列中有條目id和父級的條目。SQL - 父級子女的訂購結果

可以說,我有以下

0 ----- 0 ------ home 
1 ----- 4 ------ PD1 
2 ----- 0 ------ CAT1 
3 ----- 2 ------ PD2 
4 ----- 2 ------ CAT2 

拳頭山坳作爲ID,第二個是父母,並在年底的標題。

有沒有一種方法(使用ORDER或其他方法)以下列順序返回結果?

0 ----- 0 ------ home 
    2 ----- 0 ------ CAT1 
     3 ----- 2 ------ PD2 
     4 ----- 2 ------ CAT2 
      1 ----- 4 ------ PD1 

任何的幫助深表感謝

問候,

菲爾

回答

0

試試這個

SELECT * FROM yourtablename ORDER BY parentfieldname 
+0

父母,身份證不起作用 –

+0

你能否顯示你的代碼..它顯示任何錯誤運行? – mithunsatheesh

0

會不會是這麼簡單

ORDER BY ParentID, ID 
1

試試這個:

SELECT id, parent, title 
FROM yourtable 
ORDER BY parent, id 
0

首先,如果你想在一個定製的方式訂購(不使用一個名稱字段的PK或字母),您需要添加一個字段來定義不同的排序權對象。我會添加一個字段到表中稱爲類似ordered_weight的字段 - 您不希望使用字段名稱順序或序列b/c它們是保留的SQL字詞。

其次,你需要一個命令的條款:

ORDER BY top_level.ordering_weight, next_level.ordering_weight, ..., deepest_level.ordering_weight
請注意,我的命令的子句首先由我的樹的最高級別,最後是最低或最深的樹。

當然,如果你正在尋找一個動態的遞歸級別,你可以不考慮上述情況。

通常當我看到像這樣的父母子女關係時,我看到人們想要做超過1級的遞歸。您的模式存在的問題是,它不支持動態遞歸級別。您只能獲取頂級父級的子級,每個額外的級別需要另一個級聯(有一些聰明的方法可以讓這個過關,但他們仍然需要每級級別的額外SQL)。

我覺得你是看進嵌套集模型,它允許遞歸的無限水平的查詢什麼可能是更加有用。 請參閱:http://en.wikipedia.org/wiki/Nested_set_model

例如,以下使用標準連接的父子關係樹非常困難,但使用類似嵌套集的模型非常容易。

 
Category A 
- Category B 
- - Category D 
- Category E 
Category F 
- Category G 
- - Category H 
- - - Category I 
- - - - Category J