我有一个部门表,这个表允许无限分级

id, parentid, name 
1   0         总公司
2   1         行政部
3   1         人事部
4   1         客服部
5   2         行政一组
6   2         行政二祖
7   5         行政一组A部我现在要给一个分配部门
操作员 选择了  2,3,7三个ID,我怎么能够迅速判断出这个操作员即选择了上级部门,又选择了子部门。

解决方案 »

  1.   

    说实话看不懂你说的,判断层次可以通过parentid还可以通过parentid和id判断是否父子关系
      

  2.   


    就是部门间有上下级关系, 而且关系链很长, 但是在选择了上级部门后,不允许继续选择下级部门通过parentId判断,所选的有上级节点parentId去找就行了
      

  3.   

    正常的方法当然是沿着部门这棵树不停地向上遍历父节点,直到路径上的所有点都与操作员选择的其他点不重复为止。不过你既然说是迅速的方法,可见这种方式并不可取。最简单的方法应该是更改id的命名规则,使之隐含的包含父节点的路径信息:
    id, parentid, name 
    1    0         总公司
    12   1         行政部
    13   1         人事部
    14   1         客服部
    125  12        行政一组
    126  12        行政二祖
    1257 125       行政一组A部这样,操作员选择12,13,1257时,根据编码规则立即可判定1257属于12的间接子节点,是不合法的。
    如果不想更改id命名规则的话,我暂时能想到的是在这个表增加一列,将行政部及其所有子节点(直接的或间接地)都用一个标签统一表示,人事部及其子节点用另个一标签表示,不过这种方式肯定有一定的局限性了。