首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

怎么根据不同的权限来查询其中的合?(求高手:"小磊"帮忙)

2012-01-03 
如何根据不同的权限来查询其中的合?(求高手:"小磊"帮忙)????????????????????????????????????我需要根据

如何根据不同的权限来查询其中的合?(求高手:"小磊"帮忙)
????????????????????????????????????

我需要根据用户的权限在文本框中显示: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 来查找是否存在相应的权限



这样的做法好处是速度快,并且符合第三范式规则

热点排行