树形结构分类编码算法的实现问题

joinrry 2004-06-22 05:30:23
采用64位长整型为树形结构编码
每层8位 共8层 每层可以有256种分类
但sql server 长整型有一个符号位
好像这种编码需要大量的位操作 不知具体怎么实现?
请有着方经验的高手讲一讲?
怎样插入一个新的分类?
怎样删除一个已有的分类?
怎样将一个分类降级或升级?
...全文
260 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 2004-06-22
  • 打赏
  • 举报
回复
种类不可能是很多的,几万种类别已经是非常多的了.

除非你将产品和类别混合在这一齐,这样的话,只能说明你的表结构设置不合理.

用无限分级的话,要统计也不是要多次连接数据库,采用函数+存储过程处理,速度也不会慢到那里去.
joinrry 2004-06-22
  • 打赏
  • 举报
回复
to zjcxc(邹建)
用无级分类的方法有一个问题没办法解决的
就是我要搜索某一类商品时 首先要用递归求出它下面的所有分类 当层数多和分类大的情况下 多次连接数据库 这种方法的效率非常低 我有没有更好的方法 所以就不能采用

而用我举的这种方法 就非常容易实现
选出第一层第一种分类下的所有商品

select * from product where product.fartherid>16 and product.fartherid<32
如果商品表用fartherid 索引之后 速度就会非常快
joinrry 2004-06-22
  • 打赏
  • 举报
回复
to zjcxc(邹建) :
字符型不够灵活 查询的时候只能用like语句
001这种编码在用数字型的就是1
我这里用一个4+4位的两层举例说明一下我的思路
27的2进制为0001 1001
它的含义是第一层第1种分类 和第二层的第9个分类
关于你讲的升降级麻烦 主要是要使用位操作 我不懂
请大虾们指点指点!!!


zjcxc 2004-06-22
  • 打赏
  • 举报
回复
用这种编码方法,最大的麻烦就是编码升级/降级,及类别的改变.
还有一个麻烦的是每层位数的分配,考虑不好,以后就很难使用.

一般这种用在类别变化很少的情况下,如果类别变化频繁,建议用无级分类的方法,即:
编号 类别名称 上级编号
zjcxc 2004-06-22
  • 打赏
  • 举报
回复
你那种编码方法,改用字符型吧.
因为用数据型的话,001这种编码是体现不了的,只能是>0开头

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧