MYSQL查询排列类别层次结构列表

时间:2014-01-18 10:28:02

标签: php mysql hierarchy

我有一个数据库列表,看起来像这样:

ID      Name      Parent_ID
1       Cat 1     NULL
2       Cat 2     NULL
3       Cat 3     2
4       Cat 4     3
5       Cat 5     1
6       Cat 6     2

我想要获得的输出是按层次顺序排列的所有类别,并按字母顺序排序。像这样:

Cat 1
    Cat 5
Cat 2
    Cat 3
        Cat 4
    Cat 6

我真的不确定如何得到这个结果,这就是我现在所拥有的,但不起作用:

 SELECT * from Categories AS parent 
 LEFT JOIN Categories AS child ON child.Parent_ID = parent.ID

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

我认为,您需要在PHP中构建类别树。试试吧(例子):

$sql = 'SELECT * from Categories ORDER BY parent_id ASC'; 
$items = // fetch as array of assoc.arrays

// example
// $items = array(
//     array('id' => 3, 'parent_id' => 1 ,'name'=>'..'),
//     array('id' => 4, 'parent_id' => 3, ,'name'=>'..'),
//     array('id' => 7,  'parent_id' => 0, ,'name'=>'..'),
//);

$childs = array();
foreach($items as &$item) $childs[$item['parent_id']][] = &$item;
unset($item);

foreach($items as &$item) if (isset($childs[$item['id']]))
    $item['childs'] = $childs[$item['id']];
unset($item);

$tree = $childs[0];

echo '<pre>';
print_r($tree);
echo '</pre>';