从邻接模型中排序非嵌套数据数组

时间:2013-03-19 10:59:32

标签: php arrays sorting adjacency-list adjacency-list-model

我有一个从数据库表中获取的数据数组,该数据库表使用邻接模型来构建主题的层次结构。每条记录包含以下字段:

  • 'id' - 一个独特的AI id。
  • 'name' - 显示名称。
  • 'parent_id' - 父主题的id(对于根主题可以为null)

数组来自未嵌套的数据库,并按照您的预期按ID排序。 'id'字段是随机的和abritary的,不能依赖于产生有用的顺序。我正在寻找一种方法来使用parent_id对数组进行排序,以便它处于正确的邻接顺序中,但最终结果没有嵌套到子数组中。列表如下所示:

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

非常感谢任何帮助或指向示例的指针(即使是在不同的语言中)。

1 个答案:

答案 0 :(得分:0)

您可以添加一个字段,例如sort,您可以在该字段中存储相同ID的顺序。

另一种解决方案是按ORDER BY parent_id, id对它们进行排序(在SQL中),或者使用JOINs(未经测试)将两者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作为其父对象(您需要它来获取{{1}父母)。