国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Heim php教程 PHP源碼 PHP+Mysql 的無(wú)限級(jí)分類

PHP+Mysql 的無(wú)限級(jí)分類

May 25, 2016 pm 04:59 PM

一個(gè)PHP項(xiàng)目要用到分類,但不確認(rèn)是4級(jí)還是需要用到5級(jí),想著干脆做成無(wú)限級(jí)分類好了。
一開(kāi)始想是按以前一樣,數(shù)據(jù)庫(kù)建4個(gè)值,如下:
id:?自增???|???pid:?父類ID???|??xid:?排序ID???|??classname:?分類名稱
后來(lái)想到這種在讀取數(shù)據(jù)時(shí)和修改時(shí)比較不方便,而且在產(chǎn)品讀取時(shí)尤其不便,于時(shí)改成了以下的方案:
在Mysql的表中新增了一個(gè)字段,現(xiàn)數(shù)據(jù)庫(kù)如下:
表名?w_faqclass:???id:?自增???|???pid:?父類ID???|??xid:?排序ID???|??classname:?分類名稱??|??rank:??等級(jí)
定義:
一級(jí)分類,pid?為?0?,rank?為"/"
二級(jí)分類,pid?為?一級(jí)分類的id,rank?為"/一級(jí)分類的id/"
三級(jí)分類,pid?為?二級(jí)分類的id,rank?為"/一級(jí)分類的id/二級(jí)分類的id/"
依此類推...

1.基礎(chǔ)函數(shù)

/*
利于遞歸返回已經(jīng)進(jìn)行了排序的無(wú)限級(jí)分類的數(shù)組
不想用遞歸的話也可以用 like 來(lái)獲取后再進(jìn)行排序,我比較懶,就不寫那種獲取方式了,其實(shí)用 like 更好,推薦用那種方式
$datatable        : 數(shù)據(jù)表名
$startid        : 開(kāi)始父類ID
$wheretColumns    :父類列名
$xColumns        : 排序列名
$xtype            : 排序方式
$returnArr        : 返回?cái)?shù)組
*/
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;
}
/*
查詢某表中的某個(gè)值,只會(huì)返回一個(gè)值
$datatable        : 數(shù)據(jù)表名
$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.增加分類

<?php
    $classArr = ReadClass(&#39;w_faqclass&#39;,&#39;0&#39;,&#39;asc&#39;,array());
    $canum = count($classArr);
     
    echo "<select name=&#39;pid&#39;>";
    echo "<option value=&#39;0&#39;>主分類</option>";
    for($i=0; $i<$canum; $i++){
        $rankArr = split("/",$classArr[$i][&#39;rank&#39;]);
        $ranknum = count($rankArr);
        $t = "";
        for($j=1; $j<$ranknum; $j++){ //用于格式化顯示子類
            $t .= "├┄┄";
        }
        echo "<option value=&#39;".$classArr[$i][&#39;id&#39;]."&#39;>".$t.$classArr[$i][&#39;classname&#39;]."</option>";
    }
    echo "</select>"
?>
 
 
 
//保存時(shí)的操作,需要判斷是否為主分類,當(dāng)為主類時(shí), rank 值設(shè)為 /
//查詢父類的 rank 值,用父類的 rank 加上 父類的 id 值
if($pid != 0){
    $pidrank = SelectValue(&#39;w_faqclass&#39;,$pid,&#39;rank&#39;,&#39;id&#39;); 
    $rank = $pidrank.$pid."/";
}else{
    $rank = "/";    
}

3.修改分類

<?php
    /*
    注意,因?yàn)槭切薷模诖隧?yè)面加載時(shí)已將當(dāng)前分類的所有值讀出來(lái)了,對(duì)應(yīng)是:$pid,$rank
    */
    $classArr = ReadClass(&#39;w_faqclass&#39;,&#39;0&#39;,&#39;asc&#39;,array());
    $canum = count($classArr);
    echo "<select name=&#39;pid&#39;>";
    echo "<option value=&#39;0&#39;>主分類</option>";
 
    for($i=0; $i<$canum; $i++){
        // 因?yàn)槭切薷?,所以?dāng)前分類不能選擇自身或自身以下的分類,多加個(gè) rank 值的優(yōu)勢(shì)啊,哈哈,以前做單pid值的時(shí)候這里還得用次遞歸查詢
        while($ids == $classArr[$i][&#39;id&#39;] || strstr($classArr[$i][&#39;rank&#39;],$rank.$ids."/")){
            $i++;
        }
         
        $rankArr = split("/",$classArr[$i][&#39;rank&#39;]);
        $ranknum = count($rankArr);
        $t = "";
        for($j=1; $j<$ranknum; $j++){
            $t .= "├┄┄";
        }
        if($pid == $classArr[$i][&#39;id&#39;]){
            $selected = "selected";    
        }else{
            $selected = "";
        }
        echo "<option value=&#39;".$classArr[$i][&#39;id&#39;]."&#39; ".$selected.">".$t.$classArr[$i][&#39;classname&#39;]."</option>";
    }
    echo "</select>"
?>
 
// 保存時(shí)的操作
// 要做到改動(dòng)時(shí)該分類的所有子分類rank值都需要變動(dòng),選取得原來(lái)子分類通用到的 rank 值,也就是該分類的 rank值加上它的ID值
// 利于 mysql 的REPLACE語(yǔ)句進(jìn)行替換
if($pid != 0){
    $pidrank = SelectValue(&#39;w_faqclass&#39;,$pid,&#39;rank&#39;,&#39;id&#39;);
    $rank = $pidrank.$pid."/";
}else{
    $rank = "/";    
}
$orank = SelectValue(&#39;w_faqclass&#39;,$ids,&#39;rank&#39;,&#39;id&#39;).$ids."/";
$nrank = $rank.$ids."/";
     
mysql_query("UPDATE `w_faqclass` SET rank = REPLACE(rank,&#39;".$orank."&#39;,&#39;".$nrank."&#39;);");
mysql_query("UPDATE `w_faqclass` SET `classname`=&#39;".$classname."&#39;,`xid`=&#39;".$xid."&#39;,`pid`=&#39;".$pid."&#39;,`rank`=&#39;".$rank."&#39; where `id`=&#39;".$ids."&#39;;");

4.刪除和查詢

$zid = SelectValue(&#39;w_faqclass&#39;,$ids,&#39;id&#39;,&#39;pid&#39;);
 
if($zid>0){
    ...
}
Erkl?rung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Hei?e KI -Werkzeuge

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

Hei?e Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Hei?e Themen

PHP-Tutorial
1502
276