Php MYSQL查询以排列类别列表层次结构
我有一个数据库列表,如下所示:Php MYSQL查询以排列类别列表层次结构,php,mysql,hierarchy,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
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
非常感谢您的帮助。我认为,您需要用PHP构建类别树。尝试一下(示例):
$sql='SELECT*from Categories ORDER BY parent_id ASC';
$items=//获取为assoc.array的数组
//范例
//$items=数组(
//数组('id'=>3,'parent_id'=>1,'name'=>'..),
//数组('id'=>4,'parent_id'=>3,'name'=>'..),
//数组('id'=>7,'parent_id'=>0,'name'=>'..),
//);
$childs=array();
foreach($items as&$item)$childs[$item['parent_id']][]=&$item;
未结算(项目);
foreach($items as&$item)if(isset($childs[$item['id']]))
$item['childs']=$childs[$item['id']];
未结算(项目);
$tree=$childs[0];
回声';
打印(树);
回声';
可能重复@HAL9000 No。只有两个级别如果您知道您的树只有两个级别,只需根据需要将表连接到自身即可。感谢您的回复。在这个例子中,只有几个级别,但是它可以更深入。我认为在这种情况下使用递归更好。获取根目录,然后递归地获取父目录和这些父目录的父目录,直到得到“nothing”,然后处理到另一个根目录directory@ASTRALiENS这是一个解决方案:)感谢您提供这些解决方案。我想问题是,哪一个会产生最快的结果。我假设一个MYSQL查询和处理过的PHP是最快的,而不是多个SQL查询。我会试试这个,但非常感谢!
$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>';