2013-03-19 95 views
0

我有一個從數據庫表中獲取的數據數組,該數據庫表使用鄰接模型來構建一系列主題。每個記錄包含以下字段:對來自鄰接模型的非嵌套數據數組排序

  • 'id' - 一個唯一的AI ID。
  • 'name' - 顯示名稱。
  • 「PARENT_ID」 - 一個母話題的ID(可以爲null根主題)

數組來自數據庫未嵌套和編號的順序排列如你所願。 'id'字段是隨機的和附屬的,不能依賴於產生有用的命令。我正在尋找一種方法來使用parent_id對數組進行排序,以便它以正確的鄰接順序排列,但沒有將最終結果嵌套到子數組中。該列表看起來象下面這樣:

  • RootTopicA
  • ATopic1
  • ATopic2
  • Child1ofATopic2
  • Child2ofATopic2
  • ATopic3
  • RootTopicB
  • BTopic1
  • BTopic2

任何幫助或一個指向一個例子(即使在不同的語言),將不勝感激。

+0

什麼是你的數組結構?我明白,上面的列表是你想要的輸出,但是輸入是什麼? – Voitcus 2013-03-19 11:33:02

+0

它從數據庫數組(數組(ID => 1,名稱=> RootTopicA,parent_id => null),數組(ID => 2,名稱=> ATopic1,parent_id => 1))等數據記錄 – ShaunUK 2013-03-19 11:36:30

回答

0

您可以添加一個字段,例如sort,其中您將在類別中存儲相同ID的順序。

另一種方案是通過ORDER BY parent_id, id對它們進行排序(在SQL),或者兩者結合,ORDER BY sort,使用連接等(未測試):

SELECT object.id, object.sort, parent.id, parent.sort 
FROM objects AS object 
LEFT JOIN objects AS parent ON object.parent=parent.id 
ORDER BY parent.sort, object.sort; 

假設objects是你的表名,相同的表是object作爲主要對象,並且parent作爲其父項的對象(您需要它獲得父項的sort)。

+0

不幸的是,我不認爲這是我正在尋找的。 parent_id列中應該有足夠的信息將數據安排到父母,子女和子女孩,而無需額外的排序欄。只要每個父母的子女都在其下面,最後的順序並不重要(可以是按字母順序排列,也可以是按ID排列)。理想情況下,我想使用數組而不是查詢,因此我可以將其包裝到類/函數中供其他地方使用。 – ShaunUK 2013-03-19 11:20:00

+0

如果我要按parent_id排序,我會得到一個像這樣的列表RootTopicA,RootTopicB,Atopic1,Atopic2,Atopic3,Btopic1,Btopic2,child1ofatopic2,child2ofatopic2 – ShaunUK 2013-03-19 11:20:52

+0

您是對的,我會更多地考慮它 – Voitcus 2013-03-19 11:31:31