function get_category($id){
創(chuàng)新互聯(lián)公司從2013年創(chuàng)立,先為東風(fēng)等服務(wù)建站,東風(fēng)等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為東風(fēng)企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
$str=array();
//$sql = "select * from biao where id=$id";查詢節(jié)點(diǎn),自己寫吧
$result = array('id'=,'parent_id'=);//查詢結(jié)果一個(gè)數(shù)組格式
if($result){
$str = get_category($result['parent_id']);
$str[]=$result;
}
return $str;
}
}
調(diào)用get_category()就行了,$str第一個(gè)元素是節(jié)點(diǎn)本身,去掉就行了。
這種類型的數(shù)據(jù),一般數(shù)據(jù)庫中,一張表會(huì)有存在兩個(gè)字段,一個(gè)是它本身id,另一個(gè)是它的父級parent_id。
既然要找到它的祖父級,sql語句這樣寫:
$id = empty($_POST['id'])?'':$_POST['id'];
$parent_id = get_parent_id($id);
$p_p_id = get_parent_id($parent_id);
function get_parent_id($id){
$sql = "select parent_id from ecs_table1 where id=" . $id;
return($GLOBALS['db']-getone($sql ));
}
遞歸,就是根據(jù)現(xiàn)有的id,重復(fù)取。
上面get_parent_id只是獲取父id,當(dāng)然,你可以寫一個(gè)直接獲取祖父id的函數(shù)。
不過,現(xiàn)在大部分php網(wǎng)站,都只會(huì)有獲取父類的函數(shù),想discuz,ecshop等。獲取祖父id,就是不斷的獲取該id的父id。
你這種表結(jié)構(gòu)叫鄰接表,查詢的方式通過自連接。如
SELECT?t1.name?AS?lev1,?t2.name?as?lev2,?t3.name?as?lev3,?t4.name?as?lev4
FROM?Tbname?AS?t1
LEFT?JOIN?Tbname?AS?t2?ON?t2.pid?=?t1.id
LEFT?JOIN?Tbname?AS?t3?ON?t3.pid?=?t2.id
LEFT?JOIN?Tbname?AS?t4?ON?t4.pid?=?t3.id
WHERE?t1.name?=?'XXXX'
這種方法的主要局限是你需要為每層數(shù)據(jù)添加一個(gè)自連接,隨著層次的增加,自連接
變得越來越復(fù)雜,檢索的性能自然而然的也就下降了。當(dāng)然這種結(jié)構(gòu)在查詢前必須知道該節(jié)點(diǎn)所處的層級,否則無法確定自連接的深度。
鄰接表模型的局限性很大,用純SQL實(shí)現(xiàn)有一定的難度。不妨考慮其他模型,比如嵌套模型。
嵌套模型的基本結(jié)構(gòu)是樹型結(jié)構(gòu),SQL檢索比鄰接表要方便很多。
關(guān)于嵌套模型,PHPChina的第一期電子雜志PHPer也有過深入探討,請參考!