如何根据不同的权限来查询其中的合?(求高手:"小磊"帮忙)
????????????????????????????????????
我需要根据用户的权限在文本框中显示:text1.text=菜品总数量
text2.text=菜品总金额
-------------------------------------
在数据库中设两个表,一个是用户权限表(图1)另一个是明晰表(图2)
我是想当用户登录后根据自己的权限来显示相应的数据,权限号1,2,3,4表示可以显示明晰表中相应权限号的数据,如果权限号是2,3那么就只能显示明晰表2和3的数据了。
图1(权限表)
编码 姓名 密码 权限号
--------------------------------
001 张三 2 1,2,3,4
002 李四 1 3,4
' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '
图2(明晰表)
编号 名称 数量 金额 权限号
--------------------------------
123 小白菜 2 2.3 1
123 大白菜 2 0.5 3
123 小西瓜 2 22 3
123 黄瓜 2 5.6 2
123 土豆 2 55 4
请问该如何查询实现?
我需要根据用户的权限在文本框中显示:text1.text=菜品总数量
text2.text=菜品总金额
[解决办法]
首先在系统登录时,保存用户权限字符串,比如(1,2,3,4)
在数据显示的Form_load事情中,根据不同的权限等级做不同的查询
strSql=select sum(数量) as 数量,sum(金额) as 金额 from 明晰表 a where a.权限号 in (1,2,3,4)
[解决办法]
create table #t1(
code varchar(100),
name varchar(100),
password varchar(20),
admin varchar(100)
)
insert into #t1(code,name,password,admin)
select '001 ', '三 ', '2 ', '1,2,3,4 'union all
select ' 002 ', '四 ', '1 ', '3,4 '
create table #t2 (
code varchar(100),
name varchar(100),
numbe1 numeric(10,5),
money1 numeric(10,5),
admin varchar(100)
)
insert into #t2
select '123 ', '小白菜 ', '2 ', '2.3 ', '1 ' union all
select '123 ', '大白菜 ', '2 ', '0.5 ', '3 ' union all
select '123 ', '小西瓜 ', '2 ', ' 22 ', '3 ' union all
select '123 ', '黄瓜 ', '2 ', '5.6 ', '2 ' union all
select '123 ', '土豆 ', '2 ', '55 ', ' 4 '
select sum(numbe1),sum(money1) from #t2 as b where charindex (b.admin,(select a.admin from #t1 as a where a.code= '001 '))> 0
code是你登录用户的编号
[解决办法]
权限号存放 :1,2,3,4 不符合第三范式规则
并使用 in 子句 是极其没有效率的,在明细多的情况下,速度将很慢
权限号只用一个 bigint 字段来存
每个权限号 用 2的N次方来代替
如权限1是 2的0次方=1,
权2=2的1次方=2,
权3=2的2次方=4。。。如此类推
如果用户甲 拥有权2和权3的权限 表示 为 权2+权3之和=2+4=6,如此类推
查询时使用 Select .... where (用户权限 & 权限值) <> 0 来查找是否存在相应的权限
这样的做法好处是速度快,并且符合第三范式规则