日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

php mysql怎么实现,使用php与mysql怎么实现一个无限级分类

發(fā)布時間:2023/12/2 数据库 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php mysql怎么实现,使用php与mysql怎么实现一个无限级分类 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

使用php與mysql怎么實現(xiàn)一個無限級分類

發(fā)布時間:2020-12-25 15:25:14

來源:億速云

閱讀:84

作者:Leah

本篇文章為大家展示了使用php與mysql怎么實現(xiàn)一個無限級分類,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

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

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

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

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

在Mysql的表中新增了一個字段,現(xiàn)數(shù)據(jù)庫如下:

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

定義:

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

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

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

依此類推...

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

利于遞歸返回已經(jīng)進行了排序的無限級分類的數(shù)組

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

$datatable????:?數(shù)據(jù)表名

$startid????:?開始父類ID

$wheretColumns??:父類列名

$xColumns????:?排序列名

$xtype??????:?排序方式

$returnArr????:?返回數(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;

}

/*

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

$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. 增加分類 (直接做到了select中用于選擇 )<?php

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

$canum?=?count($classArr);

echo?"";

echo?"主分類";

for($i=0;?$i

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

$ranknum?=?count($rankArr);

$t?=?"";

for($j=1;?$j

$t?.=?"├┄┄";

}

echo?"".$t.$classArr[$i]['classname']."";

}

echo?""

?>

//保存時的操作,需要判斷是否為主分類,當(dāng)為主類時,?rank?值設(shè)為?/

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

if($pid?!=?0){

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

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

}else{

$rank?=?"/";

}

3. 修改分類<?php

/*

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

*/

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

$canum?=?count($classArr);

echo?"";

echo?"主分類";

for($i=0;?$i

//?因為是修改,所以當(dāng)前分類不能選擇自身或自身以下的分類,多加個?rank?值的優(yōu)勢啊,哈哈,以前做單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

$t?.=?"├┄┄";

}

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

$selected?=?"selected";

}else{

$selected?=?"";

}

echo?"".$t.$classArr[$i]['classname']."";

}

echo?""

?>

//?保存時的操作

//?要做到改動時該分類的所有子分類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){

...

上述內(nèi)容就是使用php與mysql怎么實現(xiàn)一個無限級分類,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注億速云行業(yè)資訊頻道。

總結(jié)

以上是生活随笔為你收集整理的php mysql怎么实现,使用php与mysql怎么实现一个无限级分类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。