PHP+Mysql无限级分类高效查询


Mysql分类表
id pid level name
1 0 0 test1
2 0 0 test2
3 1 1 test1.1
4 3 2 test1.1.1

PHP查询方法
Mysql数据查询类忽略----(大家都懂的)

我的查询方法:

   
  $My_rs = $my_conn->mysql_query('select * from table where pid = 0');
  
$class_rs = array();
$Do_While_Static=mysql_num_rows($My_rs)?true:false;
if($Do_While_Static) $Prs=array($My_rs);
while($Do_While_Static){
$My_rs=end($Prs);
if($rs=mysql_fetch_array($My_rs)){
$class_rs[]=$rs;
$My_Prs = $my_conn->mysql_query('select * from table where pid = '.$rs['id']);
$Temp_Static=mysql_num_rows($My_Prs)?true:false;
if($Temp_Static) $Prs[]=$My_Prs;
}else{
array_pop($Prs);
if(count($Prs)==0){
$Do_While_Static=false;
break;
}
}
}

输出:

   
  foreach($class_rs as $Num=>$rs){
  
$T_Str=str_pad('',$rs['level'],"-");
echo $T_Str.$rs['name'];
}
$rs=NULL;

以上就是我的查询和输出代码,我不知这个查询是不是算高效查询,所以我分享出来,让大家给点意见,或者大家分享一下自己的查询和输出方法,让我学习一下,谢谢大家了

php mysql

都乃河勇人 11 years, 4 months ago

看到楼主的分类有3级或者更多,建议将表结构设计成如下:
id pid level name path
1 0 1 编程语言 0-1
2 1 2 PHP 0-1-2
3 1 2 JAVA 0-1-3
4 2 3 PHP移动开发 0-1-2-4
5 3 3 JAVAEE 0-1-3-5
6 0 1 JS框架 0-6

path的是由父ID-自身ID这种格式组成,查询按照path字段排序即可。
select * from table order by path asc;
这样查询分类变得简单了,修改分类的时候也需要更新path字段。

凛的翅膀 answered 11 years, 4 months ago

Your Answer