麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 網站 > 建站經驗 > 正文

php+mysql實現無限級分類

2024-04-25 20:43:12
字體:
來源:轉載
供稿:網友

目思路分析:一個PHP項目要用到分類,但不確定分幾級,所以就想做成無限級分類。

一開始想是按以前一樣,數據庫建4個值,如下:

id: 自增 | pid: 父類ID | xid: 排序ID | classname: 分類名稱

后來想到這種在讀取數據時和修改時比較不方便,而且在產品讀取時尤其不便,于時改成了以下的方案:

在Mysql的表中新增了一個字段,現數據庫如下:

表名 w_faqclass: id: 自增 | pid: 父類ID | xid: 排序ID | classname: 分類名稱 | rank: 等級

定義:

一級分類,pid 為 0 ,rank 為"/"

二級分類,pid 為 一級分類的id,rank 為"/一級分類的id/"

三級分類,pid 為 二級分類的id,rank 為"/一級分類的id/二級分類的id/"

依此類推...

1. 基礎函數

/*

利于遞歸返回已經進行了排序的無限級分類的數組

不想用遞歸的話也可以用 like 來獲取后再進行排序,我比較懶,就不寫那種獲取方式了,其實用 like 更好,推薦用那種方式

$datatable : 數據表名

$startid : 開始父類ID

$wheretColumns :父類列名

$xColumns : 排序列名

$xtype : 排序方式

$returnArr : 返回數組

*/

function ReadClass($datatable,$startid,$xtype,$returnArr){

$db = $datatable;

$sid = $startid;

$xtype = $xtype;

$lu = $returnArr;

$sql = "select * from `".$db."` where `pid`='".$sid."' order by xid ".$xtype.";";

$cresult= mysql_query($sql);

if(mysql_num_rows($cresult)>0){

while($rs = mysql_fetch_array($cresult)){

$lunum = count($lu);

$lu[$lunum]['id'] = $rs['id'];

$lu[$lunum]['pid'] = $rs['pid'];

$lu[$lunum]['rank'] = $rs['rank'];

$lu[$lunum]['classname']= $rs['classname'];

$lu[$lunum]['xid'] = $rs['xid'];

$lu = ReadClass($db,$rs['id'],$xtype,$lu);

}

}

return $lu;

}

/*

查詢某表中的某個值,只會返回一個值

$datatable : 數據表名

$wherevalue : 條件值

$selectColumns : 查詢列名

$whereColumns : 條件列

*/

function SelectValue($datatable,$wherevalue,$selectColumns,$whereColumns){

$sql = "select `".$selectColumns."` from `".$datatable."` where `".$whereColumns."`='".$wherevalue."';";

$result = mysql_query($sql);

while($rs = mysql_fetch_array($result)){

return $rs[$selectColumns];

}

}

2. 增加分類 (直接做到了select中用于選擇 )

<?php

$classArr = ReadClass('w_faqclass','0','asc',array());

$canum = count($classArr);

echo "<select name='pid'>";

echo "<option value='0'>主分類</option>";

for($i=0; $i<$canum; $i++){

$rankArr = split("/",$classArr[$i]['rank']);

$ranknum = count($rankArr);

$t = "";

for($j=1; $j<$ranknum; $j++){ //用于格式化顯示子類

$t .= "├┄┄";

}

echo "<option value='".$classArr[$i]['id']."'>".$t.$classArr[$i]['classname']."</option>";

}

echo "</select>"

?>

//保存時的操作,需要判斷是否為主分類,當為主類時, rank 值設為 /

//查詢父類的 rank 值,用父類的 rank 加上 父類的 id 值

if($pid != 0){

$pidrank = SelectValue('w_faqclass',$pid,'rank','id');

$rank = $pidrank.$pid."/";

}else{

$rank = "/";

}

3. 修改分類

<?php

/*

注意,因為是修改,在此頁面加載時已將當前分類的所有值讀出來了,對應是:$pid,$rank

*/

$classArr = ReadClass('w_faqclass','0','asc',array());

$canum = count($classArr);

echo "<select name='pid'>";

echo "<option value='0'>主分類</option>";

for($i=0; $i<$canum; $i++){

// 因為是修改,所以當前分類不能選擇自身或自身以下的分類,多加個 rank 值的優勢啊,哈哈,以前做單pid值的時候這里還得用次遞歸查詢

while($ids == $classArr[$i]['id'] || strstr($classArr[$i]['rank'],$rank.$ids."/")){

$i++;

}

$rankArr = split("/",$classArr[$i]['rank']);

$ranknum = count($rankArr);

$t = "";

for($j=1; $j<$ranknum; $j++){

$t .= "├┄┄";

}

if($pid == $classArr[$i]['id']){

$selected = "selected";

}else{

$selected = "";

}

echo "<option value='".$classArr[$i]['id']."' ".$selected.">".$t.$classArr[$i]['classname']."</option>";

}

echo "</select>"

?>

// 保存時的操作

// 要做到改動時該分類的所有子分類rank值都需要變動,選取得原來子分類通用到的 rank 值,也就是該分類的 rank值加上它的ID值

// 利于 mysql 的REPLACE語句進行替換

if($pid != 0){

$pidrank = SelectValue('w_faqclass',$pid,'rank','id');

$rank = $pidrank.$pid."/";

}else{

$rank = "/";

}

$orank = SelectValue('w_faqclass',$ids,'rank','id').$ids."/";

$nrank = $rank.$ids."/";

mysql_query("UPDATE `w_faqclass` SET rank = REPLACE(rank,'".$orank."','".$nrank."');");

mysql_query("UPDATE `w_faqclass` SET `classname`='".$classname."',`xid`='".$xid."',`pid`='".$pid."',`rank`='".$rank."' where `id`='".$ids."';");

4. 刪除和查詢就簡單了,這個就不贅述了,提到一點,記得在刪除前確認下該類下面是否存在子類就可以了。

$zid = SelectValue('w_faqclass',$ids,'id','pid');

if($zid>0){

...

以上就是php+mysql實現無限極分類的方法,希望對大家的學習有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 精品国产乱码久久久久久丨区2区 | 久久国产精品免费视频 | 斗罗破苍穹在线观看免费完整观看 | 日韩av成人 | 高清视频91 | 国产美女精品视频 | 97精品视频在线观看 | 日本在线免费观看视频 | 国产成人在线一区 | 国产一区网址 | 欧美精品18| 久久免费视频8 | 91精品观看91久久久久久国产 | 国产精品免费一区二区三区都可以 | 欧洲精品视频在线观看 | 91成人一区 | 色戒在线版 | 毛片视频播放 | 日本精品视频一区二区三区四区 | 福利一区二区三区视频在线观看 | 欧美熟videos肥婆 | xxxxxx免费 | 午夜a狂野欧美一区二区 | 久久伊人国产精品 | 视频一区二区三区在线播放 | 日韩大片在线永久观看视频网站免费 | 在线成人看片 | 暴力肉体进入hdxxxx古装 | 最新中文字幕免费视频 | 欧美一级黄色片在线观看 | 亚洲精品欧美二区三区中文字幕 | 成人男女啪啪免费观看网站四虎 | 激情大乳女做爰办公室韩国 | 亚洲电影免费观看国语版 | 一级免费观看 | 美女羞羞视频网站 | 久久99精品久久久久久秒播蜜臀 | 麻豆视频国产在线观看 | 在线天堂中文在线资源网 | 日日鲁夜夜视频热线播放 | 日韩中文字幕一区二区三区 |