mysql创建函数问题

xgj1989 2009-10-23 12:25:31
我的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 管理员2

user_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好像很不给面子

高手赐教
...全文
396 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
nianzhang747 2009-10-23
  • 打赏
  • 举报
回复
其实mysql底层也是那么做的

行转列

它却没做 要自己union
wwwwb 2009-10-23
  • 打赏
  • 举报
回复
直接用GROUP_CONCAT就可以了
xgj1989 2009-10-23
  • 打赏
  • 举报
回复
group_concat() 我昏。。。mysql还有这个函数啊,,嘻嘻,,谢谢。。。
vinsonshen 2009-10-23
  • 打赏
  • 举报
回复
你建立不了函数,是未开启功能:
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

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧