我的MySQL版本是 5.1.32-community MySQL Community Server (GPL)为什么我创建不了函数
 
 DELIMITER $$DROP FUNCTION IF EXISTS `Myf`$$CREATE   FUNCTION Myf() RETURNS varchar(50)  
 begin
  return '11';
end$$
DELIMITER ; 一个简单的函数都报错,,怎么回事啊,,顺便问一下,
我其实想创建一个函数实现如下功能,我的用户有多个角色,用户和角色在不同的两张表里面,还有一张中间表。
然后我想把用户的所有角色查出来,当成一个字符串显示,比如
user表
id   name
1     张山role表
id   name
1     管理员1
2     管理员2user_role表
uid  rid
1     1
1     2 那么这个用户的角色既是管理员1,也是管理员2所以我想查出来的结果如下
id    name   user_role 
 1     张山   管理员1,管理员2我写的函数如下(不知道mysql有更好的解决办法没,有的话高手指点一下
CREATE
    
    FUNCTION processRoleName(user_id int(11) )
    RETURNS  varchar(100) CHARSET utf8    
    BEGIN
declare returnStr varchar(100);
select returnStr=ifnull(returnStr,',')+name  from 
role,user_role where id=rid and uid=user_id;
return  returnStr;
end;
 
在sqlserver里面类似的方法是可以的,,,但是mysql好像很不给面子高手赐教

解决方案 »

  1.   

    你建立不了函数,是未开启功能:
    mysql> show variables like '%func%';
    +---------------------------------+-------+
    | Variable_name                   | Value |
    +---------------------------------+-------+
    | log_bin_trust_function_creators | OFF   |
    +---------------------------------+-------+
    1 row in set (0.00 sec)mysql> set global log_bin_trust_function_creators=1;
    Query OK, 0 rows affected (0.00 sec)mysql> show variables like '%func%';
    +---------------------------------+-------+
    | Variable_name                   | Value |
    +---------------------------------+-------+
    | log_bin_trust_function_creators | ON    |
    +---------------------------------+-------+
    1 row in set (0.00 sec)mysql>你的需求可以一句语句处理完,不用自己创建函数:
    select a.*,group_concat(c.name) as user_role 
    from `user` a 
    inner join user_role b on a.id=b.uid 
    inner join role c on b.rid=c.id
      

  2.   

    group_concat() 我昏mysql还有这个函数啊,,嘻嘻,,谢谢
      

  3.   

    其实mysql底层也是那么做的行转列它却没做 要自己union