一个无限分类的问题,已基本实现。请帮忙完善一下。 本帖最后由 phper002 于 2011-01-11 18:42:16 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 function tree($parentid, $level = 0){$result = mysql_query("Select * FROM category Where parentid = {$parentid}");while($row = mysql_fetch_array($result)){echo str_repeat(" ", 2 * $level) . $row['catname'].'<br />';tree($row['catid'], ++ $level);}}if(($parentid + 0) < 1) $parentid = 0;tree($parentid); 你可以考虑根据数据的特点, 把sql语句降低一下, 不然这个可能太猛了... 把sql语句的数量降低...你这样, 如果每一级有10个类别:1级需要: 1条sql2级需要: 1 + 10条sql3级需要: 1 + 10 + 100条sql4级需要: 1 + 10 + 100 + 1000条sql $result = mysql_query("Select * FROM category Where parentid = {$parentid}");改为$result = mysql_query("Select 需要的字段 FROM category Where parentid = {$parentid}"); while($row = mysql_fetch_array($result)) 改为while($row = mysql_fetch_array_assoc($result)) 比如, 我用这样一个递归function retrieval($pids) { $result = mysql_query("Select * FROM category Where parentid in (" . implode(",", $pids) . ")"); $result = array_merge(retrieval(这里传入检索出的本级的类别id数组));}这个递归, 用4个sql就可以完成4级的查询...当然, 这种方式也有自己的缺点, 比如随着级别的深入, 发送的sql语句就变大了..所以, 要根据你自己的数据特点来做才好...你现在的目的就是要把数据库中的这些树状数据取出来, 展现成一个树..但是, 把这些数据取出来, 并不一定要一条一条的去发那么多的sql, 可以简化取数据的方式, 因为发送很多条sql执行毕竟是比较慢的....所以, 把数据三下五除二整出来...到了内存里面, 那就随你怎么折腾了.. 判断循环的次数 用static 变量存储 function tree($parentid, $level = 0){$result = mysql_query("Select * FROM category Where parentid = {$parentid}");while($row = mysql_fetch_array($result)){echo str_repeat(" ", 2 * $level) . $row['catname'].'<br />';tree($row['catid'], ++ $level);}}if(($parentid + 0) < 1) $parentid = 0;tree($parentid);这个代码不行吗?那改成 试试吧另外,尽量自己多考虑考虑问题的解决方法,其实,很多人不愿意直接给你答案,是为了不让你成为没有思想,只会摘抄的无用之人能到社区中来无偿回答问题,帮助别人的人,都不是什么坏人,楼主还是本着一颗宽容的心去多思考思考问题吧心能静下来是关键。 数据少,一个sql取全部数据,数组操作数据多,引入ajax tree,每点一个节点,只load对应的子节点。 php 写md5 绑定授权 PHP怎么编写批量删除MYSQL数据库中的过期记录? linux上配置openssl_verify 如何取得字符串中的关键字 PHP如何设置页面缓存1星期 很急的时间戳问题 - 时间戳转换 请问怎样写程序,可以判断网页哪部分打开慢? 关于vss版本控制器! 在php中怎样将图片写入数据库?怎样从数据库读出来? !!!!!!!急呀,,,,,!!!!!为什么没人回答,???CSDN:) StarUML 如何增加PHP代码插件? 求一段正则
{
$result = mysql_query("Select * FROM category Where parentid = {$parentid}");
while($row = mysql_fetch_array($result))
{
echo str_repeat(" ", 2 * $level) . $row['catname'].'<br />';
tree($row['catid'], ++ $level);
}
}
if(($parentid + 0) < 1) $parentid = 0;
tree($parentid);
1级需要: 1条sql
2级需要: 1 + 10条sql
3级需要: 1 + 10 + 100条sql
4级需要: 1 + 10 + 100 + 1000条sql
$result = mysql_query("Select * FROM category Where parentid = {$parentid}");
改为
$result = mysql_query("Select 需要的字段 FROM category Where parentid = {$parentid}");
while($row = mysql_fetch_array($result)) 改为while($row = mysql_fetch_array_assoc($result))
function retrieval($pids) {
$result = mysql_query("Select * FROM category Where parentid in (" . implode(",", $pids) . ")");
$result = array_merge(retrieval(这里传入检索出的本级的类别id数组));
}
这个递归, 用4个sql就可以完成4级的查询...当然, 这种方式也有自己的缺点, 比如随着级别的深入, 发送的sql语句就变大了..所以, 要根据你自己的数据特点来做才好...你现在的目的就是要把数据库中的这些树状数据取出来, 展现成一个树..
但是, 把这些数据取出来, 并不一定要一条一条的去发那么多的sql, 可以简化取数据的方式, 因为发送很多条sql执行毕竟是比较慢的....
所以, 把数据三下五除二整出来...
到了内存里面, 那就随你怎么折腾了..
{
$result = mysql_query("Select * FROM category Where parentid = {$parentid}");
while($row = mysql_fetch_array($result))
{
echo str_repeat(" ", 2 * $level) . $row['catname'].'<br />';
tree($row['catid'], ++ $level);
}
}
if(($parentid + 0) < 1) $parentid = 0;
tree($parentid);这个代码不行吗?
那改成 试试吧
另外,尽量自己多考虑考虑问题的解决方法,其实,很多人不愿意直接给你答案,是为了不让你成为没有思想,只会摘抄的无用之人能到社区中来无偿回答问题,帮助别人的人,都不是什么坏人,楼主还是本着一颗宽容的心去多思考思考问题吧心能静下来是关键。
数据多,引入ajax tree,每点一个节点,只load对应的子节点。