2013-03-04 3 views
0

끝 카테고리를 표시하는 카테고리 트리 시스템을 만들려고합니다.하위 카테고리가있는 하위 카테고리가있는 하위 카테고리

ID PARENT_ID CATEGORY_NAME

PHP 코드 :

$cat_array = array(); 
$subcat_array = array(); 
if (mysqli_connect_errno()) 
      { 
      echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
      }   

$sql = mysqli_query($con, "SELECT * FROM `documents_category` WHERE ISNULL(parent_id) "); 
while($row = mysqli_fetch_array($sql)) 
{  $cat_array[] = $row; 
//echo $row['category_name']; 
} 

// print_r($cat_array); 


$sql2 = mysqli_query($con, "SELECT * FROM `documents_category` 
WHERE parent_id IS NOT NULL "); 
while($row2 = mysqli_fetch_array($sql2)) 
{  $subcat_array[] = $row2; 
} 

foreach ($cat_array as $value) 

{ 
    echo "{$value['category_name']}<br/>"; 

    foreach ($subcat_array as $value2) 

    { 
      if($value2['parent_id'] == $value['id']) 

      { 
      echo "{$value2['category_name']}<br/>"; 
      } 


    } 

}

이 하위 범주는 단지 부모 ID를 사용하는 것이 데이터베이스는 설치 등이다. 나는 한 부모와 한 아이에게이 일을 할 수 있지만 그 이후에는 아무 것도 나타나지 않습니다. 나는 이것을 여러 가지 방법으로 시도했지만 행운이 없다. 어떤 충고?

+0

체크 아웃이 http://stackoverflow.com/questions/14795956/multilevel-menu-from- 데이터베이스 레코드 –

+0

우리 테이블 구조를 보여줍니다. 단일 쿼리로 솔루션을 찾을 수있을 것 같습니다. – TNK

+0

http://i48.tinypic.com/akv800.png – Daniel

답변

0

재귀를 사용해야합니다. 일반적으로 저는 PDO를 사용합니다. 그러나 작업 예제를 만들려고했습니다 :

<?php 
$cat_array = array(); 
$subcat_array = array(); 
if (mysqli_connect_errno()) 
{ 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
}   

function GetCategories($parent_id, $counter = 0) 
{ 

    $sql = mysqli_query($con, "SELECT * FROM `documents_category` WHERE parent_id = " . (int)$parent_id); 
    while($row = mysqli_fetch_array($sql)) 
    { 
     echo str_repeat("&nbsp;", $counter) . $row["id"] . " - " . $row["parent_id"] . " - " . $row["category_name"]; 
     $sub_category = mysqli_query($con, "SELECT * FROM `documents_category` WHERE parent_id = " . (int)$row["id"]); 
     $counter++; 
     if(count($sub_category) > 0) 
      GetCategories($row["id"], $counter); 
    } 
} 

$parent_categories = GetCategories(0); 
?> 

알다시피,이 함수를 호출하여 "루트"를 선택했습니다. 카테고리를 반향시킵니다. 그런 다음 현재 ID에 하위 카테고리가 있는지 확인한 다음 함수를 다시 호출하지만 현재 행의 parent_id로 호출합니다. 발견되지 않으면 더 멀리 갈 것입니다 ... 공백이나 다른 것을 추가하기 위해 카운터를 사용할 수 있습니다 ....

+0

이 답변을 주셔서 감사합니다. $ cat_array 배열에서 원래 foreach를 실행하고 각 반복마다 재귀 함수를 실행하게합니까? 사과 나는 이것에 초보적이다. – Daniel

관련 문제