2017-02-14 49 views
0

我有這樣的MySQL表 「類別」:
手柄父/子類別在MySQL/PHP

id category  parent 
1 category1  NULL 
2 subcategory1 1 
3 category2  NULL 
4 subcategory2 2 

,我希望得到這樣的結果:

category1 
    subcategory1 
     subcategory2 
category2 

得到這個結果,我使用此代碼,但速度很慢:

foreach($db->query("SELECT * FROM categories WHERE parent IS NULL") as $parent) 
{ 
    $t=0; 
    categories($db,$t,$parent['id'],$parent['category']); 
} 

function categories($db,$t,$id,$category) 
{ 
    echo"<option value=".$id.">";// 
    for($i=0;$i<$t;$i++) {echo"&nbsp;&nbsp;&nbsp;"; $GLOBALS['cat'].="&nbsp;&nbsp;&nbsp;";} 
    echo $category."</option>";//" ".$id. 
    $GLOBALS['cat'].=$category."<br>"; 
    $t++; 
    if($db->query("SELECT * FROM categories WHERE parent=".$id)->rowCount()>0) 
    { 
     foreach($db->query("SELECT * FROM categories WHERE parent=".$id) as $child) 
     categories($db,$t,$child['id'],$child['category']); 
    } 
} 

您有更快的解決方案嗎?
感謝

+0

你應該看看'嵌套集合'。那麼你可以避免必須做幾十個查詢來構建你的樹...這裏分享的信息太多了...... –

回答

0

如果你知道你的樹的深度(最大或期望的),你可以擁有一切在SQL,扁平的行表示道:

SELECT c.category, c1.category AS sub1, c2.category AS sub2, c3.category AS sub3 
FROM categories c 
    LEFT JOIN 
     (categories c1 
      LEFT JOIN 
       (categories c2 
         LEFT JOIN categories c3 
         ON c3.parent = c2.category) 
       ON c2.parent = c1.category) 
     ON c1.parent = c.category 
WHERE c.parent IS NULL; 

有了這樣的,它不是一個大處理在UI中呈現它。