一个数据库表 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语言
谢谢
有如下字段
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语言
谢谢
拿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
……
这个好做,是怎么实现的呢?
我用笨方法也实现了,不过,个人认为应该没有楼主的好,楼主能否赐教?
呵呵,我的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;楼主试试。