我知道我这么写 是很慢的
我知道思路 但是做不出来
应该一次性将所有数据取出来
然后排序 求赐教
function getBookmarkcategory($pid = 0, &$result = array(), $spac = 0)
{
if(MODULE_NAME=="Home"){
$ispublic=0;
$uid=session('uid');
$ispublic+="And bookmarkcategory_staffid = $uid";
}else if(MODULE_NAME=="Admin"){
$ispublic=1;
}
$Model = new Model();
$spac = $spac + 8;
$res=$Model->query( "SELECT * FROM x_bookmarkcategory WHERE bookmarkcategory_pid=$pid And bookmarkcategory_ispublic = $ispublic order by bookmarkcategory_sort");
foreach($res as $key=>$value){
$result[]=$res[$key];
getBookmarkcategory($value['bookmarkcategory_id'],$result,$spac);
}
return $result;
}
$list = getBookmarkcategory();
return $list;我知道我这么写 是很慢的
我知道思路 但是做不出来
应该一次性将所有数据取出来
然后排序 求赐教
function getBookmarkcategory($pid = 0, &$result = array(), $spac = 0)
{
if(MODULE_NAME=="Home"){
$ispublic=0;
$uid=session('uid');
$ispublic+="And bookmarkcategory_staffid = $uid";
}else if(MODULE_NAME=="Admin"){
$ispublic=1;
}
$Model = new Model();
$spac = $spac + 8;
$res=$Model->query( "SELECT * FROM x_bookmarkcategory WHERE bookmarkcategory_pid=$pid And bookmarkcategory_ispublic = $ispublic order by bookmarkcategory_sort");
foreach($res as $key=>$value){
$result[]=$res[$key];
getBookmarkcategory($value['bookmarkcategory_id'],$result,$spac);
}
return $result;
}
$list = getBookmarkcategory();
return $list;
不说需求,表结构,谁知道那么一坨代码是干吗用的
php无限分类 一种算法 可以参考 PHPCMS category 表结构。它是把所有的父(树)结点与子(树)结点都递归存入数据库。可以一次记取存所有数据到数组再递归。
可以参考下面问题的答案,“分类”和权限管理中的部门类似
http://segmentfault.com/q/1010000004365843/a-1020000004365952
立即学习“PHP免费学习笔记(深入)”;
$res=$Model->query( "SELECT * FROM x_bookmarkcategory WHERE bookmarkcategory_pid=$pid And bookmarkcategory_ispublic = $ispublic order by bookmarkcategory_sort");
应该是慢在这里,完全可以想办法不要放到递归里面查询,先一次性查询出来,然后递归也比这个快N倍啊
本系统经过多次升级改造,系统内核经过多次优化组合,已经具备相对比较方便快捷的个性化定制的特性,用户部署完毕以后,按照自己的运营要求,可实现快速定制会费管理,支持在线缴费和退费功能财富中心,管理会员的诚信度数据单客户多用户登录管理全部信息支持审批和排名不同的会员级别有不同的信息发布权限企业站单独生成,企业自主决定更新企业站信息留言、询价、报价统一管理,分系统查看分类信息参数化管理,支持多样分类信息,
4
function getBookmarkcategory($pid = 0, &$result = array(), $spac = 0)
{
if(MODULE_NAME=="Home"){
$ispublic=0;
$uid=session('uid');
$ispublic+="And bookmarkcategory_staffid = $uid";
}else if(MODULE_NAME=="Admin"){
$ispublic=1;
}
$Model = new Model();//竟然是递归 每次寻环 都要实例模型 慢的原因 之一 放到函数外面
$spac = $spac + 8;
$res=$Model->query( "SELECT * FROM x_bookmarkcategory WHERE bookmarkcategory_pid=$pid And bookmarkcategory_ispublic = $ispublic order by bookmarkcategory_sort");
//SELECT * 这种写法 性能低 bookmarkcategory_pid=$pid--bookmarkcategory_pid 是否索引
foreach($res as $key=>$value){
$result[]=$res[$key];
getBookmarkcategory($value['bookmarkcategory_id'],$result,$spac);
}
return $result;
}
//速度最好的是 数据一次在外部取出 再来递归 很快 mysql 操作很慢的
一次查询查出所有,然后循环,使用传值引用调整数据结构,然后就出来了
可以用左右值树
http://wenku.baidu.com/view/cb2bb3eeaeaad1f346933ffd.html
效率非常高
可以用数据字典做,一次性拿出全部数据,再循环一次即可
因为你在不停地从外部存储读取数据。如果数据量不大,一次性可以把所有需要的数据读取出来,然后在内存中构造树。哪些是需要的数据在数据生成的时候就可以把关联表保存下来。如果数据量非常大,可以考虑按树的层级存储关联数据,分几次读取。
PS: 看你的代码里,要小心SQL注入
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号