無限級分類核心設計:資料表儲存父分類 ID (father_id) 與路徑 (path),透過遞歸函數生成樹狀結構。
CREATE TABLE `sort` (
`id` INT PRIMARY KEY AUTO_INCREMENT,
`name` VARCHAR(50) NOT NULL,
`father_id` INT DEFAULT 0,
`path` VARCHAR(255) DEFAULT '', -- 祖先 ID 集合,如 "0,1,3"
`isdir` TINYINT DEFAULT 1 -- 1=目錄, 0=文件/葉子節點
);
function sort_list($str, $fatherid, $count) {
$rs = $this->sql->re_datas("SELECT * FROM sort WHERE father_id = $fatherid");
$num = $this->sql->sql_numrows();
for ($i = 0; $i < $num; $i++) {
$name = "";
for ($n = 1; $n < $count; $n++) $name .= "│ ";
$name .= ($i == $num - 1) ? "└─" : "├─";
$name .= $rs[$i]['name'];
if ($rs[$i]['isdir']) {
$str .= "<span style='color:#CCC'>$name</span>";
} else {
$str .= $name;
}
$str = $this->sort_list($str, $rs[$i]['id'], $count + 1);
}
return $str;
}
$sort_list = ""; $sort_list = $this->sort_list($sort_list, 0, 1); echo $sort_list;
INDEX (father_id)、INDEX (path)。