部门表table字段 id,fid,name1、0、销售部
2、0、市场部
3、0、总经理办公室
4、1、销售一组
5、1、销售二组
6、1、销售三组
7、2、市场一部
8、2、市场二部。。
(项目的部门有点变态,大小部门加起来有500个以上)是这样无限按照fid分类的方式存储的,我现在只用到2级我有一个权限表range字段 uid,rangerange 存的是部门的id,格式是字符串 例(1,2,3,4,6)现在一个人的权限是这样的uid 为 1
range 为 (2,5,7,8)这个用户拥有市场部大分类和部门以下所有部门的权限
但是他有拥有销售二组的权限,但是字段中没有存储销售不大分类的字段编号
页面中有二级联动下拉菜单我如何知道他拥有哪些大分类的权限?
range字段中如果包含大分类的编号这个好说,但是如果他仅仅拥有小部门的权限,下拉菜单中也得显示出大分类我如果一个个查一个个比较的话,方法也太笨了
有没有好点的方法能快速找到

解决方案 »

  1.   


    while(所有fid==0){
           if(权限字段包含id) 输出。。
           else{
                while(所有fid==id){
                     if(权限字段包含id) 输出。。
                }
           } }
    这样太低级了吧
      

  2.   

    select id  from tbname where fid=0 and find_in_set(id,(1,2,3,456,67,78,89,4))>0;
      

  3.   


    我运行了下,提示报错#1241 - Operand should contain 1 column(s) 首页我反复检查字段名是没错的,他提示返回的字段应包含一栏?不好意思,我第一次用 find_in_set 这个函数
      

  4.   

    select id from tbname where fid=0 and find_in_set(id,'1,2,3,456,67,78,89,4')>0;
    是我写错了,把引号写错括号了。
      

  5.   

    mysql> select * from zzxoyo;
    +------+------+--------------+
    | id   | fid  | name         |
    +------+------+--------------+
    |    1 |    0 | 销售部       |
    |    2 |    0 | 市场部       |
    |    3 |    0 | 总经理办公室 |
    |    4 |    1 | 销售一组     |
    |    5 |    1 | 销售二组     |
    |    6 |    1 | 销售三组     |
    |    7 |    2 | 市场一部     |
    |    8 |    2 | 市场二部     |
    +------+------+--------------+
    8 rows in set (0.00 sec)mysql> select *
        -> from zzxoyo a
        -> where fid=0
        -> and (
        -> find_in_set(a.id,'2,5,7,8')
        -> or
        -> exists(select 1 from zzxoyo where fid=a.id and find_in_set(id,'2,5,7,8'))
        -> );
    +------+------+--------------+
    | id   | fid  | name         |
    +------+------+--------------+
    |    1 |    0 | 销售部       |
    |    2 |    0 | 市场部       |
    +------+------+--------------+
    2 rows in set (0.00 sec)mysql>