php分页查询mysql|php结合mysql查询无限下级树输出

时间:2020-08-24  来源:mysql教程  阅读:

树输出


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.="".$name.""; 

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()函数返回查询到的数目

调用方法:$sort_list = sort_list($sort_list,0,1);

例子

表:category
id   int   主键,自增
name    varchar    分类名称
pid    int    父类id,默认0

顶级分类的 pid 默认就是0了。当我们想取出某个分类的子分类树的时候,基本思路就是递归,当然,出于效率问题不建议每次递归都查询数据库,通常的做法是先讲所有分类取出来,保存到PHP数组里,再进行处理,最后还可以将结果缓存起来以提高下次请求的效率。

先来构建一个原始数组,这个直接从数据库中拉出来就行:

$categories = array(
    array("id"=>1,"name"=>"电脑","pid"=>0),
    array("id"=>2,"name"=>"手机","pid"=>0),
    array("id"=>3,"name"=>"笔记本","pid"=>1),
    array("id"=>4,"name"=>"台式机","pid"=>1),
    array("id"=>5,"name"=>"智能机","pid"=>2),
    array("id"=>6,"name"=>"功能机","pid"=>2),
    array("id"=>7,"name"=>"超级本","pid"=>3),
    array("id"=>8,"name"=>"游戏本","pid"=>3),
);目标是将它转化为下面这种结构

电脑
—笔记本
——-超级本
——-游戏本
—台式机
手机
—智能机
—功能机

用数组来表示的话,可以增加一个 children 键来存储它的子分类:

array(
    //1对应id,方便直接读取
    1 => array(
        "id"=>1,
        "name"=>"电脑",
        "pid"=>0,
        children=>array(
            &array(
                "id"=>3,
                "name"=>"笔记本",
                "pid"=>1,
                "children"=>array(
                    //此处省略
                )
            ),
            &array(
                "id"=>4,
                "name"=>"台式机",
                "pid"=>1,
                "children"=>array(
                    //此处省略
                )
            ),
        )
    ),
    //其他分类省略
)处理过程:

$tree = array();
//第一步,将分类id作为数组key,并创建children单元
foreach($categories as $category){
    $tree[$category["id"]] = $category;
    $tree[$category["id"]]["children"] = array();
}
//第二部,利用引用,将每个分类添加到父类children数组中,这样一次遍历即可形成树形结构。
foreach ($tree as $k=>$item) {
    if ($item["pid"] != 0) {
        $tree[$item["pid"]]["children"][] = &$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结合mysql查询无限下级树输出

http://m.bbyears.com/shujuku/94546.html

推荐访问:
相关阅读 猜你喜欢
本类排行 本类最新