关于crm客户管理权限的问题

zzxoyo 2011-07-05 02:49:35
业务需求是

1、销售员可以看见自己的客户
2、团队经理可以看见自己团队下所有销售员的客户
3、销售部的老总可以看见整个销售部门所有团队销售员的的客户
4、总经理看到所有的

最初这个东西,是08年做的

我当时是这样设计的

dept 部门表

user 人员表

cust 客户表

range范围权限表



range存储的是每个帐户拥有哪个部门的权限,两个字段

uid 员工id
ranges varchar(255)


如是普通人员则是空,
部门经理存部门表ID(5),或者有的部门经理管理两个部门(4,5)
老总们存(1,2,3,4,5)这样的部门ID标识


这样,在登陆时候,我就把每个人,主要是针对管理人员的所有部门权限ID,查出来,然后再对应查出来每个部门下的员工ID

放到session中,

如果$_SESSION['login']['user_ranges'] = '2,3,4,5,6,7';都是销售员的uid

在客户列表页面,cust表中,有uid标识这个客户的所属销售员

因此,经理们的列表的语句都是



select * from cust where uid in ($_SESSION['login']['user_ranges'])

最初数据量少,没感觉到什么

现在数据量大了起来,cust表近百万了,公司的销售员使用crm人数也有近400个,

公司权利较大的几个总查看列表时,那个条件,my god

uid in (300多个员工id)

速度明显慢了下来

有高手说in多的话,索引已经无效了,最好不要这样用in,直接连表都比这个强

当时我想着那么就连吧
select * from cust where uid in ($_SESSION['login']['user_ranges'])
这个语句是为了描述简单这样写的,但是实际项目中,因其他业务此语句已经关联了5个表

如果把权限也连上,要再加上4个表,晕,难道以后每要看列表权限都要关联近10个表么

请教这种情况该怎么个设计,求思路

另外,其他的这种oa,crm系统,他们的权限是如何设计的?
...全文
91 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzxoyo 2011-07-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 acmain_chm 的回复:]
用IN应该没有问题,你uid 的索引创建了吗?
[/Quote]

建了

[Quote=引用 2 楼 rucypli 的回复:]
in多了 确实索引无效 但这和直接连表效果一样
[/Quote]

那有什么好的方法吗?
rucypli 2011-07-05
  • 打赏
  • 举报
回复
in多了 确实索引无效 但这和直接连表效果一样
ACMAIN_CHM 2011-07-05
  • 打赏
  • 举报
回复
用IN应该没有问题,你uid 的索引创建了吗?

56,679

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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