一个数据库表 orgtable
有如下字段
id int
code varchar
name varchar
……其中有如下数据
id     code      name   ……
1      1:1       **公司1   
2      1:1:1     **部门1
3      1:1:2     **部门2
4      1:2       **公司2   
5      1:2:1     **部门3
6      1:2:2     **部门4
……数据结构是
2和3是属于公司1下的
5和6是属于公司2下的需求如下 
1 查询公司   (这个好做!也就是按code有且只有一个:的)
2 查询部门    也就是说code有两个:的为部门
但是我要显示的是如下格式
id   名称       归属
2    **部门1   **公司1
3    **部门2   **公司1
5    **部门3   **公司2
6    **部门4   **公司2
……
我采用的是mysql +ssh开发的
大家可以使用Hibernian 也可以使用sql语言
谢谢

解决方案 »

  1.   

    可以这样理解
    拿id=5的公部门举例
    id=5的部门code是1:2:1
    code值中1:2是表示归属公司如果id=5的部门3下再分小组,
    那么code就是
    1:2:1:1
    1:2:1:2
    !:2:1:3
    ……这时我要返回的数据还是
    id       名称               归属
    7     部门3小组1            部门3
    8     部门3小组2            部门3
    9     部门3小组3            部门3
    ……
      

  2.   

    楼主的:1   查询公司       (这个好做!也就是按code有且只有一个:的) 
    这个好做,是怎么实现的呢?
    我用笨方法也实现了,不过,个人认为应该没有楼主的好,楼主能否赐教?
    呵呵,我的MySQL 函数的水平很有限。我的实现方案是:
    FIND_IN_SET('bz',concat(replace(code,':',','),',bz')) = 3在不保证速度的情况下,楼主的整个需求很好实现。select a.id,a.name as '名称',b.name as '归属' from orgtable a inner join b on FIND_IN_SET('bz',concat(replace(b.code,':',','),',bz')) = 4 and SUBSTRING_INDEX(b.code, ':', 2) = a.code  where FIND_IN_SET('bz',concat(replace(a.code,':',','),',bz')) = 3 order by b.code;楼主试试。
      

  3.   

    不好意思,把程序写反了,应该是:select a.id,a.name as '名称',b.name as '归属' from orgtable a inner join b on FIND_IN_SET('bz',concat(replace(b.code,':',','),',bz')) = 3 and SUBSTRING_INDEX(a.code, ':', 2) = b.code  where FIND_IN_SET('bz',concat(replace(a.code,':',','),',bz')) = 4 order by a.code;