文章是作者原創的一篇關於在php中實現的無限級分類,有需要了解的朋友可以看看。
無限分類就像windows下新建一個文件夾,在新建的文件夾下又可以新建一個文件夾,這樣無限循環下去,無限分類也是這樣,父類可以分出它子類,子類又可以分出它的子類,這樣一直無限循環下去
代碼如下 復制代碼
--
-- 數據庫: `tree`
--
CREATE DATABASE `tree` DEFAULT CHARACTER SET gb2312 COLLATE gb2312_chinese_ci;
USE `tree`;
--
-- 表的結構 `class`
--
CREATE TABLE `class` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(10) NOT NULL,
`pid` int(11) NOT NULL,
`depth` varchar(100) default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=gb2312 AUTO_INCREMENT=30 ;
<?php
$link =mysql_connect('localhost','root','root');
mysql_select_db('tree');
mysql_query ( 'set names GBK' );
if($_GET['act']=='add'){
$name=$_POST['name'];
if($name=='') exit('name not null');
$pid=$_POST['pid'];
if($pid !=0){
$sql="select * from class where id=".$pid;
$result =mysql_query($sql);
$row = mysql_fetch_array($result);
$depth=$row['depth'].','.mysql_insert_id();//$getID即為最後一條記錄的ID
}else{
$depth=0;
}
$sql="INSERT INTO class(name,pid,depth) VALUES('".$name."','".$pid."','".$depth."')";
$result =mysql_query($sql);
if(!$result){
exit("shibai $sql");
}else{
exit("chenggong");
}
}
?>
<form id="form1" name="form1" method="post" action="?act=add">
<table width="327" border="1" cellpadding="0" cellspacing="0">
<tr>
<td width="97" height="27">名稱</td>
<td width="224"><label for="name"></label>
<input type="text" name="name" id="name" /></td>
</tr>
<tr>
<td height="30">欄目</td>
<td><select name="pid" id="pid">
<option value="0">-----頂級分類-----</option>
<?php
sort_s(0);
?>
</select></td>
</tr>
<tr>
<td height="35"> </td>
<td><input type="submit" name="button" id="button" value="提交" /></td>
</tr>
</table>
</form>
<br />
<br />
<br />
<br />
<?php
//$sql = "select * from `class` order by sort asc, id Desc";
//$sql="select * from class where pid=0";
//$result =mysql_query($sql);
//while($row = mysql_fetch_array($result)){
//$class_arr[] = array($row['id'],$row['name'],$row['classid'],$row['sort']);
// echo $row['name'].$row['id'].'---'.$row['pid'].'<br>';
sorttree(0);
//}
function sorttree($id){
//if()
$sql="select * from class where pid=".$id;
$result =mysql_query($sql);
//$a=mysql_fetch_array($result);
//$row = mysql_fetch_array($result);
while($row = mysql_fetch_array($result)){
$rid=explode(",",$row['depth']);
$i=count($rid);
$n = str_pad('',$i,'-',STR_PAD_RIGHT);
$n = str_replace("-"," ",$n);
//print_r($row).'<br>';
if($row['pid']==0){
echo $n.'|-----'.$row['name'].'-----|<br>';
}else{
echo $n.' <font color="#FF0000">|-</font>'.$row['name'].'<br>';
}
sorttree($row['id']);
}
}
function sort_s($id){
//if()
$sql="select * from class where pid=".$id;
$result =mysql_query($sql);
//$a=mysql_fetch_array($result);
//$row = mysql_fetch_array($result);
while($row = mysql_fetch_array($result)){
$rid=explode(",",$row['depth']);
$i=count($rid);
$n = str_pad('',$i,'-',STR_PAD_RIGHT);
$n = str_replace("-"," ",$n);
//print_r($row).'<br>';
if($row['pid']==0){
echo "<option value="".$row['id']."" style='background:#ccc' >".$n.'|------'.$row['name']."-----|</option>rn";
}else{
echo "<option value="".$row['id']."">".$n.' |- '.$row['name']."</option>rn";
}
sort_s($row['id']);
}
}
?>
總結原理
如何把它的各個分類一一列出來呢?
首先我們假設有這樣的一個三級分類,新聞→PHP新聞→PHP6.0出來了。
如果我們要查找“PHP6.0出來了”這條新聞,我們先點擊新聞,然後再點擊PHP新聞
就可以查出來了,也就是說我們可以通過祖父類一級一級地往下找,反過來我們只要
知道一個子類的父類,就可以把它查找出來了。這樣我們在設計數據庫時就可以多設
計一個父類id的字段就可以實現無限分類的功能了