數據庫結構如下:如何顯示並正確縮進單個節點的樹結構?
cat_ID| cat_name | cat_nicename | lft | rgt
_________________________________________________
287 | Wallpapers | wallpapers | 61 | 62
1656 | Gadget | gadget | 63 | 64
1958 | Sms | sms | 65 | 66
2901 | fun | fun | 67 | 68
4419 | Joke | joke | 69 | 70
4775 | health | health | 71 | 72
5098 | Mobile | mobile | 73 | 90
5100 | TV | tv | 91 | 92
5101 | Main | main | 93 | 94
5102 | Nokia | nokia | 76 | 83
5103 | Samsung | samsung | 84 | 87
5104 | Micromax | micromax | 88 | 89
5105 | Nokia Sub 1 | nokiasub1 | 77 | 78
5106 | Nokia Sub 2 | nokiasub2 | 79 | 82
5107 | Nokia Sub 3 | nokiasub3 | 80 | 81
5109 | Galaxy | galaxy | 85 | 86
的Folloing查詢我使用獲得一類,這一切的subcats:
$sql = "SELECT n.cat_ID,n.cat_name,n.cat_nicename, (COUNT(*)-1)
AS depth FROM " .TBL_CATEGORIES. " AS n, " .TBL_CATEGORIES. " AS p
WHERE p.cat_nicename='mobile'
AND n.lft BETWEEN p.lft AND p.rgt
GROUP BY n.lft ORDER BY n.lft;";
$result = mysql_query($sql);
$tree = array();
while ($row = mysql_fetch_assoc($result)) {
$tree[] = $row;
}
function _tab($depth) {
$tabs = '';
while ($depth-- > 0) $tabs .= ' ';
return $tabs;
}
// bootstrap loop
$result = '';
while (!empty($tree)) {
$currNode = array_shift($tree);
$result .= _tab($currNode['depth']) . $currNode['cat_name'] . $currNode['depth'].'<br />';
}
print $result;
如果我不使用p.cat_nicename='mobile'
,通過上面的代碼,樹結構顯示完美,但如果我想通過使用p.cat_nicename='mobile'
檢索只有一個節點我得到的所有深度是'0'
,因此它不會放置任何
和顯示扁平樹在'mobile'
..如果我查詢只是"mobile"
我T應當顯示一個類似:
Mobile
Nokia
Nokia Sub 1
Nokia Sub 2
Nokia Sub 3
Samsung
Galaxy
Micromax
所以我的問題是:
- 我怎樣才能顯示一個特定節點的樹?
- 如何僅顯示所有根類別?沒有孩子沒有子,通過使用單個SQL查詢?
嗨@newfurniturey如果你有時間..你可以請看看嗎?很多thanx – user1713941