按字母顺序排列邻接列表子项

时间:2012-08-14 14:38:05

标签: php sorting children adjacency-list-model

如果我有一个按id / parent_id排序的邻接列表,是否可以通过第三个文本字段(比如“name”)按字母顺序对所有父级子项进行排序?

我使用了这里提供的信息:http://explainextended.com/2009/03/17/hierarchical-queries-in-mysql/让MySQL返回已排序的邻接列表。理想情况下,这将允许我按第三列对子项进行排序,但测试数据集在该示例中根本不包含额外的列。

在我查询之后,我的数据看起来像这样,但需要按字母顺序按后代排序。

$myArr[] = array(1,0,"instruments");
$myArr[] = array(2,1,"electric");
$myArr[] = array(3,1,"acoustic");
$myArr[] = array(4,2,"guitar");
$myArr[] = array(5,2,"banjo");
$myArr[] = array(6,3,"guitar");
$myArr[] = array(5,3,"banjo");

或者:

array (
  0 => 
  array (
    0 => 1,
    1 => 0,
    2 => 'instruments',
  ),
  1 => 
  array (
    0 => 2,
    1 => 1,
    2 => 'electric',
  ),
  2 => 
  array (
    0 => 3,
    1 => 1,
    2 => 'acoustic',
  ),
  3 => 
  array (
    0 => 4,
    1 => 2,
    2 => 'guitar',
  ),
  4 => 
  array (
    0 => 5,
    1 => 2,
    2 => 'banjo',
  ),
  5 => 
  array (
    0 => 6,
    1 => 3,
    2 => 'guitar',
  ),
  6 => 
  array (
    0 => 5,
    1 => 3,
    2 => 'banjo',
  ),
)

我需要这样排序:

instruments
    acoustic
        banjo
        guitar
    electric
        banjo
        guitar

谢谢!

1 个答案:

答案 0 :(得分:1)

我不知道你想要做什么,因为你没有代码示例,但这样做不容易:

SELECT * FROM my_table ORDER BY id, parent_id, title;

首先按id排序,然后在id与ids相同时按parent_id排序,如果id和parent_ids相同则按标题排序