大家好,我有个问题想了好几天不知道如何去做,来打扰下大家,烦请大家帮我想想办法:
 我有一个记录权限的MYSQL表:
 ID  name  AAA     BBB   CCC   DDD  
 1   张三   true   false  true  true
 2   李四   false  true   true  flase  ……当我查询某一个人的时候,譬如张三,显示他所有权限为ture的列名,请问这个可不可以通过MYSQL直接实现?
我想了几天不知道如何去做,只好做了一个bean,直接填充进去.
但是感觉不是很好,谁能告诉我下如何通过SQL语句直接提取出来吗?

解决方案 »

  1.   

    select a.name,a.field_name from 
    (
    select name,'AAA' as field_name,AAA as flag FROM TB_NAME
    UNION ALL
    select name,'BBB',BBB FROM TB_NAME
    UNION ALL
    select name,'CCC',CCC FROM TB_NAME
    UNION ALL
    select name,'DDD',DDD FROM TB_NAME
    ) a
    where a.name='张三' and a.flag='ture'
    group by a.name,a.field_name
      

  2.   

    mysql> select * from tb_previleges;
    +------+------+-------+-------+------+-------+
    | ID   | name | AAA   | BBB   | CCC  | DDD   |
    +------+------+-------+-------+------+-------+
    |    1 | 张三 | true  | false | true | true  |
    |    2 | 李四 | false | true  | true | flase |
    +------+------+-------+-------+------+-------+
    2 rows in set (0.00 sec)mysql> select a.name,a.field_name,a.flag from
        -> (
        -> select name,'AAA' as field_name,AAA as flag FROM tb_previleges
        -> UNION ALL
        -> select name,'BBB',BBB FROM tb_previleges
        -> UNION ALL
        -> select name,'CCC',CCC FROM tb_previleges
        -> UNION ALL
        -> select name,'DDD',DDD FROM tb_previleges
        -> ) a;
    +------+------------+-------+
    | name | field_name | flag  |
    +------+------------+-------+
    | 张三 | AAA        | true  |
    | 李四 | AAA        | false |
    | 张三 | BBB        | false |
    | 李四 | BBB        | true  |
    | 张三 | CCC        | true  |
    | 李四 | CCC        | true  |
    | 张三 | DDD        | true  |
    | 李四 | DDD        | flase |
    +------+------------+-------+
    8 rows in set (0.02 sec)mysql>
    mysql> select a.name,a.field_name,a.flag from
        -> (
        -> select name,'AAA' as field_name,AAA as flag FROM tb_previleges
        -> UNION ALL
        -> select name,'BBB',BBB FROM tb_previleges
        -> UNION ALL
        -> select name,'CCC',CCC FROM tb_previleges
        -> UNION ALL
        -> select name,'DDD',DDD FROM tb_previleges
        -> ) a
        ->  where a.name='张三' and a.flag='true'
        ->  group by a.name,a.field_name;
    +------+------------+------+
    | name | field_name | flag |
    +------+------------+------+
    | 张三 | AAA        | true |
    | 张三 | CCC        | true |
    | 张三 | DDD        | true |
    +------+------------+------+
    3 rows in set (0.00 sec)mysql>