2014-01-18 80 views
1

的名單我有一個數據庫列表,看起來這樣的:MySQL查詢安排類別層次

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

可能重複(http://stackoverflow.com/questions/607052/hierarchical-recursion-menu-with-php-mysql) – BlitZ

+0

@ HAL9000沒有。只有兩個級別 – voodoo417

+0

如果你知道你的樹只有幾個級別,那麼外層可以根據需要經常加入表格。 – Strawberry

回答

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>'; 
[用PHP/MySQL的層次遞歸菜單]的
+1

我認爲在這種情況下使用遞歸更好。獲取根類別,而不是遞歸獲取父母和父母的父母,直到你得到「沒有」,比處理另一個根目錄 – ASTRALiENS

+0

@ASTRALiENS其解決方案之一:) – voodoo417

+0

謝謝你的這些解決方案。我想問題是哪個會產生最快的結果。我假設單個MYSQL查詢和處理PHP將是最快的,而不是多個SQL查詢。我會試試這個,但非常感謝你! – Paul