PHP代码部分:
//无限分类-使用路径
//原理:通过路径来进行拆分得到所有想得到的pid以及id,路径是在设计表时的一个字段,包含着从祖先id到父id的一系列id
//该方法,不论查看或者是删除等其他操作,都只需要执行一次sql语句就能够达到想要的效果
//该种方法也是本人比较喜欢的使用的啦,因为我的原则是能够不使用递归,就坚决不用递归
$link=mysql_connect('localhost','username,'password');
if(mysql_errno()){
echo '数据库连接失败:'.mysql_error();
}
mysql_select_db('db_kind');
mysql_set_charset('utf8');
//concat(),连接字符串成一个新字符串
//下面的代码完成一个无限分类的现实
$sql="select concat(path,'-',id) as conpath,id,name,path from wx_kind order by conpath";
$result=mysql_query($sql);
while($row=mysql_fetch_assoc($result)){
$arr=array();
//这里可以选择对path字段或者新组成的conpath字段来进行字符串的拆分
//对于explode()函数注意一点,无论要拆分的字符串是否包含使用参数的字符,都至少返回包含一个元素的数组
$count=count(explode('-',$row['path']))-1;
//str_repeat(),对字符串进行重复,主要是为了格式看的比较清楚
$str=str_repeat(' ',$count);
echo $str.$id.'=>'.$row['name'].'<hr/>';
}
/***********************************
如果现在需要进行删除操作,同样使用路径
例如现在要删除雷霆这个分类
首先根据其id找到路径
**************************************/
/* $sql1="select id,path from wx_kind where id=20";
$result1=mysql_query($sql1);
$row=mysql_fetch_assoc($result1);
$id=$row['id'];
$path=$row['path'];
//构造出以该分类作为父类或者祖先分类的所有path
$new_path=$path.'-'.$id;
//下面就可以进行删除动作了
$sql2="delete from wx_kind where id={$id} or path like '{$new_path}%'";
$result2=mysql_query($sql2);
if($result2 && mysql_affected_rows()){
echo '删除成功!';
}else{
echo '删除失败!';
} */
/*****************************************************/
//使用递归函数的方法,不解释那么多了,直接看代码吧,主要就是查找的方式不一样
function display_classify($pid=0,$num=0){
$sql="select id,name from wx_kind where pid={$pid}";
$result=mysql_query($sql);
while($row=mysql_fetch_assoc($result)){
$id=$row['id'];
$str=str_repeat(' ',$num);
echo $str.$id.'=>'.$row['name'].'<hr/>';
display_classify($id,$num+1,$sid);
}
}
//display_classify();
/*****************************************************/
//以下就是删除的方法了,慢慢看吧主要就是下面说的删除时的顺序,和应该在哪进行删除要注意一下
function del_classify($id){
//先使用递归来找出已该id为父id或祖先id的所有的子分类,然后依次从里到外进行删除操作,注意删除时的顺序
$sql="select id,name from wx_kind where pid={$id}";
$result=mysql_query($sql);
while($row=mysql_fetch_assoc($result)){
$id=$row['id'];
del_classify($id);
}
//删除操作在循环外执行
$sql1="delete from wx_kind where id={$id}";
//直接进行删除,而不是任何提示
$result=mysql_query($sql1);
if(!($result && mysql_affected_rows())){
$bool=false;
}else{
$bool=true;
}
return $bool;
}
//del_classify(5);
以下是数据库代码:
--
-- 数据库: `db_kind`
--
-- --------------------------------------------------------
--
-- 表的结构 `wx_kind_dump`
--
CREATE TABLE `wx_kind_dump` (
`id` int(11) NOT NULL auto_increment,
`pid` int(11) NOT NULL,
`name` char(40) NOT NULL,
`path` char(40) NOT NULL,
PRIMARY KEY (
补充:Web开发 , php ,