本帖最后由 top8843 于 2013-07-17 20:17:39 编辑

解决方案 »

  1.   

    其实你这个节目的,可以这样定义。父为三位从100-999.子的每一个子众1-99如100的子为10001-10099这样就很容易了。关键是可以用到Like
      

  2.   

    1、你这个同样是要动态计算IsParent吧,输出的数据,IsParent是必须的,程序中使用的是zTree插件,并且采用分批异步加载的方式,每个节点都需要IsParent来判断当前节点是否能够展开。
    2、如果按位数来区分父子关系,那么层数多了怎么办,估计字段类型只能设计成字符型了,性能并不高。
      

  3.   

    方法一:
    知道树型目录最多有多少层,直接建立父子表关系,最简单,最容易理解。方法二:
    当你不知道树型目录最多有多少层?显然用IsParent来标识是行不通的。那什么处理?把IsParent改为ParentID或ParentKey ,是父节点的关键字,能够唯一识别的
      

  4.   

    我觉得我们说的是两码事,你说的什么ParentID,我都是有的
    如果是一次性加载,和分批加载,需要的数据是不一样的,他们分别是:分批  [{id:1001,name:"南津路街道",isParent:true},{id:1002,name:"凯旋路街道",isParent:true}……]一次性  [{id:110,name:"查看服务器信息",pId:10},{id:111,name:"查看客户端信息",pId:10}……]
    其中pId就是ParentID我现在关注的是,分批加载的isParent是保存在数据表中好,还是每次查询动态计算好。
      

  5.   

    你不用关心isParent是否行得通,这是zTree要求的数据格式,推荐一下著名的树形插件zTree
    http://www.ztree.me
    下面地址,唯一的精华及置顶帖子,就是我的
    http://tieba.baidu.com/f?kw=zTree
      

  6.   

    分批  [{id:1001,name:"南津路街道",isParent:true},{id:1002,name:"凯旋路街道",isParent:true}……]
     我解释一下分批加载,isParent表示该节点有子节点,前面会有 +好 显示,否则就显示 -号,用户点击这个节点(+号),就会通过AJAX去请求ParentID为当前节点id的数据。
    比如用户点了 南津路街道,这是个有子节点的节点(isParent:true),就会加载父节点为1001的数据
      

  7.   

    是否是父节点,可以通过计算它是否有子节点来确定的。
    如果你标识为true ,子节点意外被删除了,而父节点又没有被改成false, 这样的父节点就变成了子节点
      

  8.   

    我在一楼的第二种方法就是动态计算的SELECT ID,Title,(select count(*) FROM tbDept b WHERE b.ParentID = a.id) FROM tbDept a第一种方案就是在表中设字段做标识的SELECT ID,Title,IsParent FROM tbDept
    其实,我发本帖的意思,是想征求一下那种方式更好,做标识?还是计算?
      

  9.   

    IsParent其实是冗余字段了
    查询时,方便高效了
    维护时,麻烦了一点,需要多维护一个属性