前言: 無限級實現的方式很多,以往常常使用 遞迴查詢 或者 查詢後 陣列拼裝來解決, 本次介紹的為 mysql 設定排序字段方式來解決
原理: 字元型的比較是通過 ascii 從左向右逐個比較, 直到某一處 比較出結果才停止 , 通過這樣的規律 我們可以發現, 越是排列和值越是相似的字串將 比較的次數越多 例如 『0123456』 <=> 『01234567』 , 同時我們也可以發現 這樣的值排序後的位置也越靠近
結果: 在表裡面設定 path 字段 用於儲存該記錄的路徑 , 通過對路徑的排序將相同類的資料排列在一起
宣告: 這樣的排序可以很方便的分頁查詢 , 但是如果有結構上的要求還是需要重新組裝成樹形結構.
create table `bsa_category` (
`id` int(11) not null,
`name` varchar(64) default null,
`pid` int(11) not null default '0',
`path` varchar(255) default null,
`level` int(11) default null,
primary key (`id`)
) engine=myisam default charset=utf8;
重點說明:
$res = db::table('bsa_category')
->order('path')
->select();
// str_repeat (str,int) = int 個 str
無限極分類
面試的時候被問到無限極分類的設計和實現,比較常見的做法是在建表的時候,增加乙個pid欄位用來區別自己所屬的分類 array array array id 1,pid 0,name 河北省 array id 2,pid 0,name 北京市 array id 3,pid 1,name 邯鄲市 arra...
php無限極分類
無限級分類 param1 array categories,要分類的陣列 param2 int stop id 不需要查詢子分類的id param3 int parent id 0,要查詢父分類id 欄位名稱 param4 int level 0,當前商品分類所屬的層級 根據level計算縮排的距離...
PHP無限極分類
function gentree5 items function gentree7 items items array 1 array id 1,pid 0,name 江西省 2 array id 2,pid 0,name 黑龍江省 3 array id 3,pid 1,name 南昌市 4 arr...