无限极分类(思路)
今天看segmentfault看到别人的无限极分类的高效思路(顺便理理自己的思路)
id | parent_id | category | … |
---|
1 | 0 | 无纺面料 | |
2 | 1 | 无纺布 | |
3 | 1 | 印花布 | |
4 | 2 | 涤纶无纺布 | |
查询分类或者面包屑(无纺布面料>无纺布>涤纶无纺布)
id | parent_id | category | leftId | rightId |
---|
1 | 0 | 无纺面料 | 1 | 19 |
2 | 1 | 无纺布 | 2 | 10 |
3 | 1 | 印花布 | 11 | 14 |
4 | 2 | 涤纶无纺布 | 3 | 6 |
查询的时候就只要根据leftId和rightId和parent_id 来查找
但是插入数据库的时候都要对父级+1,冒泡+1;
id | path | category | … |
---|
1 | 0 | 无纺面料 | |
2 | 0,1 | 无纺布 | |
3 | 0,1 | 印花布 | |
4 | 0,1,2 | 涤纶无纺布 | |
这样设计的话,就只要将path字段用,分割;然后where id(1,2)
SELECT *,concat(path,',',id) AS paths FROM table ORDER BY paths
{
"id": id,
"category" : "无纺布面料",
"path": [
{
"id":id,
"category":"无纺布",
"path":[
{
"id":id,
"category":"涤纶无纺布",
"path":[]
}
]
},
{
"id":id,
"category":"印花布",
"path":[],
}
]
}
由于无限级分类一般来说改动不大,只是查询;