你的位置:首页 -> 资料分类 -> 网页专题 -> PHP教程 -> 无限级分类的表结构和数据读取方法

无限级分类的表结构和数据读取方法

特点: 不用循环或者递归操作数据库, 一次读出, 节省库资源

表结构

CREATE TABLE `my_class` (
`id` SMALLINT( 5 ) UNSIGNED NOT NULL AUTO_INCREMENT ,
`parentid` SMALLINT( 5 ) UNSIGNED NOT NULL ,
`classname` VARCHAR( 20 ) NOT NULL ,
PRIMARY KEY ( `id` )
) TYPE = MYISAM ;


测试数据:
INSERT INTO `my_class` VALUES (1, 0, '中国');
INSERT INTO `my_class` VALUES (2, 1, '江苏');
INSERT INTO `my_class` VALUES (3, 2, '苏州');
INSERT INTO `my_class` VALUES (4, 2, '南京');
INSERT INTO `my_class` VALUES (5, 1, '河南');
INSERT INTO `my_class` VALUES (6, 5, '郑州');
INSERT INTO `my_class` VALUES (7, 5, '洛阳');
INSERT INTO `my_class` VALUES (8, 0, '美国');
INSERT INTO `my_class` VALUES (9, 8, '加州');
INSERT INTO `my_class` VALUES (10, 9, '圣路易斯');
INSERT INTO `my_class` VALUES (11, 9, '萨克拉门托');

实例:
读出洛阳市的所有父级

---------------- test.php?id=7 -------------------

引用:
?php
$conn = mysql_connect("localhost","root","");

mysql_select_db("test",$conn);

mysql_query("SET @id =$_GET[id], @idStr = '',@nameStr = ''");

mysql_query("SELECT @idStr := if( id = @id , concat( @idStr , '|', id ) , @idStr ) ,
@nameStr := if( id = @id , concat( @nameStr , '|', classname ) , @nameStr ) ,
@id := if( id = @id , parentid, @id )
FROM my_class ORDER BY id DESC");

$rs = mysql_query("SELECT @idStr , @nameStr ");

$row = mysql_fetch_row($rs);

echo $row[0]." ".$row[1];

?>

读出两个字串
|7|5|1
|洛阳|河南|中国

拆解为ID和分类名数组:

引用:
?php
$row[0] = substr($row[0], 1);
$row[1] = substr($row[1], 1);
$ids = explode("|",$row[0]);
$names = explode("|",$row[1]);
$idnum = count($ids);
?>


根据上面的结果生成的导航条:


引用:
?php
for($i=$idnum-1;$i>=0;$i--){
echo" > $names[$i]";
}
?>
网站说明
  • 遇需下载的资料,为了达到最快的下载速度,推荐使用网际快车(FlashGet),迅雷下载本站资料。
  • 如果您发现该资料不能下载,请查看常见问题通知管理员,谢谢!
  • 如果您发现该资料有不良信息,请点击这里进行举报,谢谢支持!
  • 如果您有好的资料程希望能与大家分享,我们愿意和您一起宣传!投稿请点击这里
  • [100免费网]对所提供下载的资料不拥有任何权利,其版权归该资料的合法拥有者所有。
| 关于本站 | 联系我们 | 版权声明 | 网站帮助 | 资料发布 | 报告错误 |
100免费网  Copyright© 2006 - 2008 100free.net All Rights Reserved  赣ICP备05003878号