有认为:产品分类数据设计采用parentID的无限级分类的方法不好,这确实也有问题,读取某一大类下的所有产品就很麻烦了,请问怎样设计更合 我是这样做的一级 T1二级 T1_1三级 T1_1_1 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 t1:t11:t123这种写法也有他的缺点。他要查某一类的所有下一级类就很麻烦(比如只要t1的第二级类而不是所有子类)。占用的空间会多很多。由于是字符,索引难度大。当类非常多的进候说不定比前一种方法+递归还要慢。根据你的实际情况选用就行了。情况需要的话同时用两种结构也不奇怪。类很少的话随意!怎么搞也慢不到哪去。 感觉parentid这种很不错啊,还没发现什么问题 http://community.csdn.net/Expert/topic/4642/4642418.xml?temp=.7272455 ice_berg16(寻梦的稻草人) ( ) 信誉:125 2006-6-2 9:59:04 得分: 0 呵呵,被楼上同学说对了。果然是这种结构你只能先用递归的方法取出t1的所有子类,然后用where type in( ...)的形式来取得产品 我一直用ParentID这种方法,取子类别的时候,就先递归取出所有子类别。这样是麻烦了点。>>针对以下的说法,想看看是否有更好的解决办法?数据库结构如何?不要说又是那种parent_id那种无级分类,害死人看了:http://community.csdn.net/Expert/topic/4642/4642418.xml?temp=.7272455很有启发,很难有完美的通用的解决办法。 既然都在问我的“更好”解决办法,我只能说:没有最终解决方案只是我就不会用parentID这种方法,我还在想我未学过软件工程和数据结构,只是不愿为了本应不太困难的工作而花费大量资源(人力和php力),所以不考虑为了查询而必须作个递归个人认为,数据结构不是为了保存数据而服务的,而是为了调用数据服务的所以必须符合方便“增删改查”的原则,所以我会宁愿多保存字节而减少取用的困难parentID对于自身的增删改查完全没有问题,但对于整个树的操作是增加了数倍的工作量对于分类(英文catalog),我倾向采用常用的图书分类学原则其实大家都常用的,上面都有提及0001 计算机00010001 计算机常识000100010001 二进制前面的数字采用二进制、十进制、十六进制、36进制……都可以固定位数,只要取得位数,自然知道第几级(例如上例8位就是第二级)取出末四位的数字就能知道该类别取出倒数8位-倒数5位的数字就能知道上一级的类别取出第一位至倒数第五位就能得到分类树增:按分类树,取最大值+1删:按分类树,删除本分类或符合树的所有类改:update操作不太困难查:按树查或者按类查都不太困难这种方式的缺点当然是位数的限制和保存字节数太多而且对于重排序更新有一定的麻烦处理方式是字符串数字混用,容易有歧义1 计算机1.1 计算机常识1.1.1 二进制这个没有位数的限制,更符合“无限”的概念这与上例的区别在于检索的不是位数,而是连接符的个数(一个.表示二级,两个.表示三级)但这种方法增删改查可能需要更高的正则匹配技巧 没有完美的解决方案的,只有看情况而定,每种结构都有优缺点,看程序的算法而定。一般情况下是,如果数据库设计复杂一些,程序往往可以简单一些,用pid这样的结构也不算麻烦的,可以用递归或是迭代遍历出所有节点 PHP如何从COM组件中获取返回的字符串? 关联表的赋值 linux 命令问题,求助~ $_GET['zhuanye'] 做过后台的高手进!= 请问在数据库的两条记录之间插入n条记录怎么实现 连接数据库的问题解决了~~但是怎么输入的是空数据? ? 外国人喜欢把html完成由php输出 急!!!请大家帮忙看一看,我的程序运不了,在线等待。先谢了。 怎样用PHP模拟POST提交file数据? mysql排序难题——怎样在top榜中使每个用户的重复记录不会被重复计数
呵呵,被楼上同学说对了。果然是这种结构你只能先用递归的方法取出t1的所有子类,然后用
where type in( ...)的形式来取得产品
数据库结构如何?
不要说又是那种parent_id那种无级分类,害死人看了:http://community.csdn.net/Expert/topic/4642/4642418.xml?temp=.7272455
很有启发,很难有完美的通用的解决办法。
只是我就不会用parentID这种方法,我还在想我未学过软件工程和数据结构,只是不愿为了本应不太困难的工作而花费大量资源(人力和php力),所以不考虑为了查询而必须作个递归个人认为,数据结构不是为了保存数据而服务的,而是为了调用数据服务的
所以必须符合方便“增删改查”的原则,所以我会宁愿多保存字节而减少取用的困难parentID对于自身的增删改查完全没有问题,但对于整个树的操作是增加了数倍的工作量
对于分类(英文catalog),我倾向采用常用的图书分类学原则
其实大家都常用的,上面都有提及0001 计算机
00010001 计算机常识
000100010001 二进制前面的数字采用二进制、十进制、十六进制、36进制……都可以
固定位数,只要取得位数,自然知道第几级(例如上例8位就是第二级)
取出末四位的数字就能知道该类别
取出倒数8位-倒数5位的数字就能知道上一级的类别
取出第一位至倒数第五位就能得到分类树
增:按分类树,取最大值+1
删:按分类树,删除本分类或符合树的所有类
改:update操作不太困难
查:按树查或者按类查都不太困难这种方式的缺点当然是位数的限制和保存字节数太多
而且对于重排序更新有一定的麻烦
处理方式是字符串数字混用,容易有歧义1 计算机
1.1 计算机常识
1.1.1 二进制
这个没有位数的限制,更符合“无限”的概念
这与上例的区别在于检索的不是位数,而是连接符的个数(一个.表示二级,两个.表示三级)
但这种方法增删改查可能需要更高的正则匹配技巧