這篇文章主要介紹“PHP+MySQL中的無(wú)限分類方法有哪些”,在日常操作中,相信很多人在PHP+MySQL中的無(wú)限分類方法有哪些問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”PHP+MySQL中的無(wú)限分類方法有哪些”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!
泰州網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)公司,泰州網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為泰州近1000家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的泰州做網(wǎng)站的公司定做!第一種方法
這種方法是很常見、很傳統(tǒng)的一種,先看表結(jié)構(gòu)
表:category
idint主鍵,自增
namevarchar分類名稱
pidint父類id,默認(rèn)0
頂級(jí)分類的pid默認(rèn)就是0了。當(dāng)我們想取出某個(gè)分類的子分類樹的時(shí)候,基本思路就是遞歸,當(dāng)然,出于效率問(wèn)題不建議每次遞歸都查詢數(shù)據(jù)庫(kù),通常的做法是先講所有分類取出來(lái),保存到PHP數(shù)組里,再進(jìn)行處理,最后還可以將結(jié)果緩存起來(lái)以提高下次請(qǐng)求的效率。
先來(lái)構(gòu)建一個(gè)原始數(shù)組,這個(gè)直接從數(shù)據(jù)庫(kù)中拉出來(lái)就行:
$categories=array(
array('id'=>1,'name'=>'電腦','pid'=>0),
array('id'=>2,'name'=>'手機(jī)','pid'=>0),
array('id'=>3,'name'=>'筆記本','pid'=>1),
array('id'=>4,'name'=>'臺(tái)式機(jī)','pid'=>1),
array('id'=>5,'name'=>'智能機(jī)','pid'=>2),
array('id'=>6,'name'=>'功能機(jī)','pid'=>2),
array('id'=>7,'name'=>'超級(jí)本','pid'=>3),
array('id'=>8,'name'=>'游戲本','pid'=>3),
);
目標(biāo)是將它轉(zhuǎn)化為下面這種結(jié)構(gòu)
電腦
—筆記本
——-超級(jí)本
——-游戲本
—臺(tái)式機(jī)
手機(jī)
—智能機(jī)
—功能機(jī)
用數(shù)組來(lái)表示的話,可以增加一個(gè)children鍵來(lái)存儲(chǔ)它的子分類:
array(
//1對(duì)應(yīng)id,方便直接讀取
1=>array(
'id'=>1,
'name'=>'電腦',
'pid'=>0,
children=>array(
&array(
'id'=>3,
'name'=>'筆記本',
'pid'=>1,
'children'=>array(
//此處省略
)
),
&array(
'id'=>4,
'name'=>'臺(tái)式機(jī)',
'pid'=>1,
'children'=>array(
//此處省略
)
),
)
),
//其他分類省略
)
處理過(guò)程:
$tree=array();
//第一步,將分類id作為數(shù)組key,并創(chuàng)建children單元
foreach($categoriesas$category){
$tree[$category['id']]=$category;
$tree[$category['id']]['children']=array();
}
//第二部,利用引用,將每個(gè)分類添加到父類children數(shù)組中,這樣一次遍歷即可形成樹形結(jié)構(gòu)。
foreach($treeas$k=>$item){
if($item['pid']!=0){
$tree[$item['pid']]['children'][]=&$tree[$k];
}
}
print_r($tree);
打印結(jié)果如下:
Array
(
[1]=>Array
(
[id]=>1
[name]=>電腦
[pid]=>0
[children]=>Array
(
[0]=>Array
(
[id]=>3
[name]=>筆記本
[pid]=>1
[children]=>Array
(
[0]=>Array
(
[id]=>7
[name]=>超級(jí)本
[pid]=>3
[children]=>Array
(
)
)
[1]=>Array
(
[id]=>8
[name]=>游戲本
[pid]=>3
[children]=>Array
(
)
)
)
)
[1]=>Array
(
[id]=>4
[name]=>臺(tái)式機(jī)
[pid]=>1
[children]=>Array
(
)
)
)
)
[2]=>Array
(
[id]=>2
[name]=>手機(jī)
[pid]=>0
[children]=>Array
(
[0]=>Array
(
[id]=>5
[name]=>智能機(jī)
[pid]=>2
[children]=>Array
(
)
)
[1]=>Array
(
[id]=>6
[name]=>功能機(jī)
[pid]=>2
[children]=>Array
(
)
)
)
)
[3]=>Array
(
[id]=>3
[name]=>筆記本
[pid]=>1
[children]=>Array
(
[0]=>Array
(
[id]=>7
[name]=>超級(jí)本
[pid]=>3
[children]=>Array
(
)
)
[1]=>Array
(
[id]=>8
[name]=>游戲本
[pid]=>3
[children]=>Array
(
)
)
)
)
[4]=>Array
(
[id]=>4
[name]=>臺(tái)式機(jī)
[pid]=>1
[children]=>Array
(
)
)
[5]=>Array
(
[id]=>5
[name]=>智能機(jī)
[pid]=>2
[children]=>Array
(
)
)
[6]=>Array
(
[id]=>6
[name]=>功能機(jī)
[pid]=>2
[children]=>Array
(
)
)
[7]=>Array
(
[id]=>7
[name]=>超級(jí)本
[pid]=>3
[children]=>Array
(
)
)
[8]=>Array
(
[id]=>8
[name]=>游戲本
[pid]=>3
[children]=>Array
(
)
)
)
優(yōu)點(diǎn):關(guān)系清楚,修改上下級(jí)關(guān)系簡(jiǎn)單。
缺點(diǎn):使用PHP處理,假如分類數(shù)量龐大,效率也會(huì)降低。
PHP+MySQL無(wú)限分類有哪些方法
第二種方法
這種方法是在表字段中增加一個(gè)path字段:
表:category
idint主鍵,自增
namevarchar分類名稱
pidint父類id,默認(rèn)0
pathvarchar路徑
示例數(shù)據(jù):
idnamepidpath
1電腦00
2手機(jī)00
3筆記本10-1
4超級(jí)本30-1-3
5游戲本30-1-3
path字段記錄了從根分類到上一級(jí)父類的路徑,用id+’-'表示。
這種方式,假設(shè)大家要查詢電腦下的所有后代分類,只需要一條sql語(yǔ)句:
selectid,name,pathfromcategorywherepathlike(selectconcat(path,’-',id,’%')aspathfromcategorywhereid=1);
結(jié)果:
+—-+———–+——-+
|id|name|path|
+—-+———–+——-+
|3|筆記本|0-1|
|4|超級(jí)本|0-1-3|
|5|游戲本|0-1-3|
+—-+———–+——-+
這種方式也被很多人所采納,我總結(jié)了下:
優(yōu)點(diǎn):查詢?nèi)菀?,效率高,path字段可以加索引。
缺點(diǎn):更新節(jié)點(diǎn)關(guān)系麻煩,需要更新所有后輩的path字段。
到此,關(guān)于“PHP+MySQL中的無(wú)限分類方法有哪些”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!
本文標(biāo)題:PHP+MySQL中的無(wú)限分類方法有哪些-創(chuàng)新互聯(lián)
新聞來(lái)源:http://jinyejixie.com/article32/dsiesc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、網(wǎng)站營(yíng)銷、電子商務(wù)、關(guān)鍵詞優(yōu)化、動(dòng)態(tài)網(wǎng)站、網(wǎng)頁(yè)設(shè)計(jì)公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容