我有一个数据库列表,看起来像这样:
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
感谢任何帮助。
答案 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>';