type_id int 无重复 类别标识,主键
type_name char(50)不允许为空 类型名称,不允许重复
type_father int 不允许为空 该类别的父类别标识,如果是顶节点的话设定为某个唯一值
type_layerchar(6) 限定3层,初始值为000000 类别的先序遍历,主要为减少检索数据库的次数按照这样的表结构,我们来看看上面例子记录在表中的数据是怎样的:type_id type_name type_father type_layer
1 总类别 0 000000
2 类别11 010000
3 类别1.1 2 010100
4 类别1.2 2 010200
5 类别21 020000
6 类别2.1 5 020100
7 类别31 030000
8 类别3.1 7 030100
9 类别3.2 7 030200
10类别1.1.13 010101
……现在按type_layer的大小来检索一下:SELECT * FROM Type_table_2 ORDER BY type_layer列出记录集如下:type_id type_name type_father type_layer
1 总类别 0 000000
2 类别11 010000
3 类别1.1 2 010100
10类别1.1.13 010101
4 类别1.2 2 010200
5 类别21 020000
6 类别2.1 5 020100
7 类别31 030000
8 类别3.1 7 030100
9 类别3.2 7 030200
……
就是表需要有一个主键,比如 ID然后还有一个字段,叫 父编号, 比如 PID
再加上其他的字段,剩下的就是写 SQL 的事情了。
例如下面这个表,就是一个可以做树状的。
CREATE TABLE test_tree (
test_id INT,
pid INT,
test_val VARCHAR(10),
PRIMARY KEY (test_id)
)
如果采用父子节点的方式 效率上可能不高 但容易实现也可以采用如下的方式
000
000000
000001
000002
000000001
这样三位表示一级 但是对每级的节点数有限制 查询也很容易
表示层次的可以快速方便的查询
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)