我是这样做的
一级 T1
二级 T1_1
三级 T1_1_1

解决方案 »

  1.   

    t1:t11:t123这种写法也有他的缺点。他要查某一类的所有下一级类就很麻烦(比如只要t1的第二级类而不是所有子类)。占用的空间会多很多。由于是字符,索引难度大。当类非常多的进候说不定比前一种方法+递归还要慢。根据你的实际情况选用就行了。情况需要的话同时用两种结构也不奇怪。类很少的话随意!怎么搞也慢不到哪去。
      

  2.   

    感觉parentid这种很不错啊,还没发现什么问题
      

  3.   

    http://community.csdn.net/Expert/topic/4642/4642418.xml?temp=.7272455
      

  4.   

    ice_berg16(寻梦的稻草人) ( ) 信誉:125  2006-6-2 9:59:04  得分: 0  
    呵呵,被楼上同学说对了。果然是这种结构你只能先用递归的方法取出t1的所有子类,然后用
    where type in( ...)的形式来取得产品
      

  5.   

    我一直用ParentID这种方法,取子类别的时候,就先递归取出所有子类别。这样是麻烦了点。>>针对以下的说法,想看看是否有更好的解决办法?
    数据库结构如何?
    不要说又是那种parent_id那种无级分类,害死人看了:http://community.csdn.net/Expert/topic/4642/4642418.xml?temp=.7272455
    很有启发,很难有完美的通用的解决办法。
      

  6.   

    既然都在问我的“更好”解决办法,我只能说:没有最终解决方案
    只是我就不会用parentID这种方法,我还在想我未学过软件工程和数据结构,只是不愿为了本应不太困难的工作而花费大量资源(人力和php力),所以不考虑为了查询而必须作个递归个人认为,数据结构不是为了保存数据而服务的,而是为了调用数据服务的
    所以必须符合方便“增删改查”的原则,所以我会宁愿多保存字节而减少取用的困难parentID对于自身的增删改查完全没有问题,但对于整个树的操作是增加了数倍的工作量
    对于分类(英文catalog),我倾向采用常用的图书分类学原则
    其实大家都常用的,上面都有提及0001 计算机
    00010001 计算机常识
    000100010001 二进制前面的数字采用二进制、十进制、十六进制、36进制……都可以
    固定位数,只要取得位数,自然知道第几级(例如上例8位就是第二级)
    取出末四位的数字就能知道该类别
    取出倒数8位-倒数5位的数字就能知道上一级的类别
    取出第一位至倒数第五位就能得到分类树
    增:按分类树,取最大值+1
    删:按分类树,删除本分类或符合树的所有类
    改:update操作不太困难
    查:按树查或者按类查都不太困难这种方式的缺点当然是位数的限制和保存字节数太多
    而且对于重排序更新有一定的麻烦
    处理方式是字符串数字混用,容易有歧义1 计算机
    1.1 计算机常识
    1.1.1 二进制
    这个没有位数的限制,更符合“无限”的概念
    这与上例的区别在于检索的不是位数,而是连接符的个数(一个.表示二级,两个.表示三级)
    但这种方法增删改查可能需要更高的正则匹配技巧
      

  7.   

    没有完美的解决方案的,只有看情况而定,每种结构都有优缺点,看程序的算法而定。一般情况下是,如果数据库设计复杂一些,程序往往可以简单一些,用pid这样的结构也不算麻烦的,可以用递归或是迭代遍历出所有节点