我的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好像很不给面子高手赐教
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好像很不给面子高手赐教
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