> 백엔드 개발 > PHP 튜토리얼 > 무제한 하위 수준 분류 트리 출력을 달성하기 위한 php+mysql 쿼리 예

무제한 하위 수준 분류 트리 출력을 달성하기 위한 php+mysql 쿼리 예

coldplay.xixi
풀어 주다: 2023-04-09 14:02:02
앞으로
3473명이 탐색했습니다.

무제한 하위 수준 분류 트리 출력을 달성하기 위한 php+mysql 쿼리 예

이 문서의 예에서는 php+mysql 쿼리를 사용하여 무제한 하위 수준 분류 트리 출력을 얻는 방법을 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 세부 사항은 다음과 같습니다.

여기에 소개된 PHP는 mysql 쿼리와 무제한 하위 트리 출력을 결합합니다. 이는 실제로 무제한 분류입니다. 여러분을 위해 PHP에서 무제한 분류에 대한 몇 가지 예를 정리했습니다.

[관련 학습 권장 사항: php 프로그래밍(동영상), mysql 동영상 튜토리얼]

Tree 출력:

function get_array($user_id,$top=0){
global $mysql,$_G;
  $sql = "select user_id as name from `{spreads_users}`  where p1.spreads_userid='{$user_id}'";
$rows= $mysql->db_fetch_arrays($sql);
  if($top==1){
  $arr[0]['name']=$user_id;
  $arr[0]['children']=array();
  }
  $top=$top+1;
foreach ($rows as $key=>$value)
 {
     $r = get_array($value['name']); //调用函数,传入参数,继续查询下级
     $arr[0]['children'][$key]['name']= $value['username']; //组合数组
      if(is_array($r)){
      $arr[0]['children'][$key]['children']= $r[0]['children'];
      }
      $i++;
    }
    return $arr;
  }
$list = get_array("1000",1); //调用函数1000是顶级ID
echo 'var data='.json_encode($list);
로그인 후 복사

이것은 Array를 출력한 다음 json으로 전송합니다.

예:

테이블 구조: id 필드는 카테고리 식별자, name 필드는 카테고리 이름, father_id 필드는 해당 카테고리가 속한 상위 카테고리의 ID, path 필드는 카테고리 경로입니다. 카테고리의 조상 컬렉션인 isdir은 디렉토리인지 여부를 결정합니다. 1은 예, 0은 아니오입니다.

표시 기능:

//$count为分类等级
sort_list($str,$fatherid,$count)
{
$rs = $this->sql->re_datas("select * from sort where father_id = fatherid");
$num = $this->sql->sql_numrows();
$i=0;
$n = 1;
while(isset($rs[$i]))
{
$name = "";
for($n = 1 ; $n < $count ; $n )
{
$name.="│ ";
}
if($i 1==$num)
{
$name.="└─".$rs[$i][name];
}
else
{
$name.="├─".$rs[$i][name];
}
if($rs[$i][isdir])
{
$str.="<span style=&#39;color:#CCCCCC&#39;>".$name."</span>";
}
else
{
$str.=$name";
}
$temp = $count 1;
$str = $this->sort_list($str,$rs[$i][id],$temp);
$i ;
}
return $str;
}
로그인 후 복사

여기서 $this->sql 객체는 SQL 작업 클래스 객체입니다. re_datas() 함수는 쿼리된 배열을 반환하고, sql_numrows() 함수는 쿼리된 숫자를 반환합니다.

Calling method:

$sort_list = sort_list($sort_list,0,1);
로그인 후 복사

Example:

Table:category

id int Primary key, auto-increment
name varchar 카테고리 name
pid int 상위 클래스 ID, 기본값 0

최상위 카테고리의 기본 pid는 0입니다. 특정 카테고리의 하위 카테고리 트리를 꺼내려는 경우 기본 아이디어는 물론 재귀입니다. 효율성 문제 때문에 매번 재귀적으로 데이터베이스를 쿼리하는 것은 권장되지 않습니다. 일반적인 접근 방식은 먼저 모든 범주를 꺼내서 PHP 배열에 저장한 다음 이를 처리하고 마지막으로 결과를 캐시하여 효율성을 높이는 것입니다.
먼저 데이터베이스에서 직접 가져올 수 있는 원본 배열을 만듭니다.

$categories = array(
  array(&#39;id&#39;=>1,&#39;name&#39;=>&#39;电脑&#39;,&#39;pid&#39;=>0),
  array(&#39;id&#39;=>2,&#39;name&#39;=>&#39;手机&#39;,&#39;pid&#39;=>0),
  array(&#39;id&#39;=>3,&#39;name&#39;=>&#39;笔记本&#39;,&#39;pid&#39;=>1),
  array(&#39;id&#39;=>4,&#39;name&#39;=>&#39;台式机&#39;,&#39;pid&#39;=>1),
  array(&#39;id&#39;=>5,&#39;name&#39;=>&#39;智能机&#39;,&#39;pid&#39;=>2),
  array(&#39;id&#39;=>6,&#39;name&#39;=>&#39;功能机&#39;,&#39;pid&#39;=>2),
  array(&#39;id&#39;=>7,&#39;name&#39;=>&#39;超级本&#39;,&#39;pid&#39;=>3),
  array(&#39;id&#39;=>8,&#39;name&#39;=>&#39;游戏本&#39;,&#39;pid&#39;=>3),
);
로그인 후 복사

목표는 이를 다음 구조로 변환하는 것입니다.

电脑
—笔记本
——-超级本
——-游戏本
—台式机
手机
—智能机
—功能机
로그인 후 복사

배열로 표시되는 경우 하위 키를 추가할 수 있습니다. 하위 카테고리를 저장하려면:

array(
  //1对应id,方便直接读取
  1 => array(
    &#39;id&#39;=>1,
    &#39;name&#39;=>&#39;电脑&#39;,
    &#39;pid&#39;=>0,
    children=>array(
      &array(
        &#39;id&#39;=>3,
        &#39;name&#39;=>&#39;笔记本&#39;,
        &#39;pid&#39;=>1,
        &#39;children&#39;=>array(
          //此处省略
        )
      ),
      &array(
        &#39;id&#39;=>4,
        &#39;name&#39;=>&#39;台式机&#39;,
        &#39;pid&#39;=>1,
        &#39;children&#39;=>array(
          //此处省略
        )
      ),
    )
  ),
  //其他分类省略
)
로그인 후 복사

Processing process:

$tree = array();
//第一步,将分类id作为数组key,并创建children单元
foreach($categories as $category){
  $tree[$category[&#39;id&#39;]] = $category;
  $tree[$category[&#39;id&#39;]][&#39;children&#39;] = array();
}
//第二部,利用引用,将每个分类添加到父类children数组中,这样一次遍历即可形成树形结构。
foreach ($tree as $k=>$item) {
  if ($item[&#39;pid&#39;] != 0) {
    $tree[$item[&#39;pid&#39;]][&#39;children&#39;][] = &$tree[$k];
  }
}
로그인 후 복사

print_r($tree); 인쇄 결과는 다음과 같습니다.

Array
(
  [1] => Array
    (
      [id] => 1
      [name] => 电脑
      [pid] => 0
      [children] => Array
        (
          [0] => Array
            (
              [id] => 3
              [name] => 笔记本
              [pid] => 1
              [children] => Array
                (
                  [0] => Array
                    (
                      [id] => 7
                      [name] => 超级本
                      [pid] => 3
                      [children] => Array
                        (
                        )
                    )
                  [1] => Array
                    (
                      [id] => 8
                      [name] => 游戏本
                      [pid] => 3
                      [children] => Array
                        (
                        )
                    )
                )
            )
          [1] => Array
            (
              [id] => 4
              [name] => 台式机
              [pid] => 1
              [children] => Array
                (
                )
            )
        )
    )
  [2] => Array
    (
      [id] => 2
      [name] => 手机
      [pid] => 0
      [children] => Array
        (
          [0] => Array
            (
              [id] => 5
              [name] => 智能机
              [pid] => 2
              [children] => Array
                (
                )
            )
          [1] => Array
            (
              [id] => 6
              [name] => 功能机
              [pid] => 2
              [children] => Array
                (
                )
            )
        )
    )
  [3] => Array
    (
      [id] => 3
      [name] => 笔记本
      [pid] => 1
      [children] => Array
        (
          [0] => Array
            (
              [id] => 7
              [name] => 超级本
              [pid] => 3
              [children] => Array
                (
                )
            )
          [1] => Array
            (
              [id] => 8
              [name] => 游戏本
              [pid] => 3
              [children] => Array
                (
                )
            )
        )
    )
  [4] => Array
    (
      [id] => 4
      [name] => 台式机
      [pid] => 1
      [children] => Array
        (
        )
    )
  [5] => Array
    (
      [id] => 5
      [name] => 智能机
      [pid] => 2
      [children] => Array
        (
        )
    )
  [6] => Array
    (
      [id] => 6
      [name] => 功能机
      [pid] => 2
      [children] => Array
        (
        )
    )
  [7] => Array
    (
      [id] => 7
      [name] => 超级本
      [pid] => 3
      [children] => Array
        (
        )
    )
  [8] => Array
    (
      [id] => 8
      [name] => 游戏本
      [pid] => 3
      [children] => Array
        (
        )
    )
)
로그인 후 복사

장점 : 관계가 명확하고 수정이 쉽습니다.

단점: PHP를 사용하여 처리하면 카테고리 수가 많으면 효율성도 떨어집니다.

관련 추천: 프로그래밍 동영상 강좌

위 내용은 무제한 하위 수준 분류 트리 출력을 달성하기 위한 php+mysql 쿼리 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:jb51.net
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿