还是关于select * from table where Dcode in(1,2,3,4,5。。。。。)的效率问题,求一个更好的解决方案!急!!

不老书生 2005-06-08 03:04:19
需求是这样的,
管理一个多级的组织树,可以理解成多级的单位、部门,或者其他组织,一张表,company表
例如:
+ 公司a code 01
公司a之分公司1 code 0101
公司a分公司1子公司1 code 010101
公司a分公司1子公司2 code 010102
公司a分公司1子公司3 code 01010201
..........
公司a之分公司2 code 0102
公司a分公司2子公司1 code 020101
公司a分公司2子公司2 code 020102
公司a分公司2子公司3 code 02010201

+ 公司b
公司b之分公司1 code 02
......................

上面公司的层数都是动态的,用户可以随意增加。
每一级的每一个公司下面都对应很多信息,比如职工,公司计划、总结等等,分别放在同一个的员工表,计划表,总结表里面,用code字段和上面的company表的code字段关联


客户对权限的需求是这样的,某个用户可以管理一个或者若干个公司(通过权限设置),以及这个公司下面的信息

比如用户a可以管理code为010101和010102的两个单位,包括他们下面的人员、总结、计划等

我现在的设计是这样的,比如在管理人员的页面,
首先判断用户的权限,得到该用户的拥有权限的单位列表,如:010101,010102

然后我用语句select * from 员工表 where code in (010101,010102) 得到该用户能够有权管理的员工列表

我现在有个疑虑
in语句的效率问题,如果某个用户属于最顶级的用户,拥有所有公司的管理权,那么它的公司权限列表就会很长(01,0101,010101,010102,0102,010201....,02),这样在执行起搜索员工的信息,效率会不会很慢??

因为所有的业务都是和公司权限挂钩的,那么不可避免的所有页面都要用到where code in (。。。。)这样的语句,

设置连统计分析,出具的结果也要跟用户的权限挂钩,因为要统计的范围首先满足在用户的权限范围内

我先很为这样的系统真正应用时的效率担心!

希望高手来仔细考虑一下,看看我的担心是多余的,或者有没有更好的解决方法???不甚感谢
...全文
217 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
不老书生 2005-06-08
  • 打赏
  • 举报
回复
我们现在的问题不是找不到某个单位的下级单位,而是已经找到了所有的某个人员可以管理的单位,

比如0101,0102,0103,

问题是要从人员表里找到属于上面三个单位的人员select * from 人员表 where 后面的sql 语句怎么写,我怕用in太影响速率。
不老书生 2005-06-08
  • 打赏
  • 举报
回复
即使code 是有规律的,总公司编号01,下面是0102,0103,0101,0104

我的权限是操作0102和0104两个单位,也就是管理这两个单位的下面的人员、总结、计划等信息,

我又如何用like呢?like '01%'吗?那不成了对所有下级单位都有权限了?
不老书生 2005-06-08
  • 打赏
  • 举报
回复
paoluo(一天到晚游泳的鱼) :你好!谢谢支持!

-----------------------------------------------------------------
但是至少用户输入的code至少是有规律的吧,不然怎么区分上下级??

区分上下级有一定的规律的话,就可以用Like了。
------------------------------------------------------------------

首先,我们没有要求客户一定要规律,所以程序没有按规律的去做,因为一旦客户输入的不规律,系统就要出错,我们是用另一个上级代码字段来确定上下级关系的。

另外,如果某个用户的公司的权限是若干平级的单位,我们从权限列表里面得到的值是10,13,15,我们又如何去用like呢?
paoluo 2005-06-08
  • 打赏
  • 举报
回复
上面的code,是我写的,比较规律010101的,但实际,我们并不要求客户这样写,编号是客户录入的,他们甚至可以加上字母,如ytsw001,ytsw002, 所以,用like肯定不行!

--------------------------------
但是至少用户输入的code至少是有规律的吧,不然怎么区分上下级??

区分上下级有一定的规律的话,就可以用Like了。
不老书生 2005-06-08
  • 打赏
  • 举报
回复
大大小小公司,在这个数据库里,应该有1000个左右!!!
不老书生 2005-06-08
  • 打赏
  • 举报
回复
blueonly(认真编程,低调生活。) : 谢谢你的支持!
是不是由上级公司的权限就一定有子公司的权限
code like "01%"

上面的code,是我写的,比较规律010101的,但实际,我们并不要求客户这样写,编号是客户录入的,他们甚至可以加上字母,如ytsw001,ytsw002, 所以,用like肯定不行!

“是不是由上级公司的权限就一定有子公司的权限”---是的。但是我们仍然需要知道某用户的公司权限列表,是这样的,比如该用户的公司权限是01,那么我们通过一种方法,找出01下面的(包含01)的所有公司的code,因为每一级别的公司自己下面都会有部门和人员(公司总部也有自己的部门和人啊,这些人的相应公司的code和company的code匹配)
wxylvmnn 2005-06-08
  • 打赏
  • 举报
回复
你到sql区问问邹健去~

blueonly 2005-06-08
  • 打赏
  • 举报
回复
是不是由上级公司的权限就一定有子公司的权限

code like "01%"
blueonly 2005-06-08
  • 打赏
  • 举报
回复
O_o
xmm1984 2005-06-08
  • 打赏
  • 举报
回复
本人菜鸟路过
帮你顶
不老书生 2005-06-08
  • 打赏
  • 举报
回复
任凭风吹雨打、时光消磨,我期盼的眼神如同寒冷的冬夜,蜷缩在墙角一隅的可怜小女孩,无人问津!

高手何在?善良的人们何在?是字数太多太长吗?但是内容和结构都很简单啊?
不老书生 2005-06-08
  • 打赏
  • 举报
回复
顶啊!!高手们呢?

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧