mysql自定义函数实现

mysql自定义函数实现

环境准备

查看mysql版本

select version();

在这里插入图片描述
查看mysql存储引擎

show variables like '%storage_engine%';

在这里插入图片描述

创建测试表

CREATE TABLE `dsp_user_media_tag` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `imei` varchar(50) COLLATE utf8_bin DEFAULT NULL,
  `tagname` varchar(20) COLLATE utf8_bin DEFAULT NULL COMMENT '标签名称',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
CREATE TABLE `dsp_user_interest_tag` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `imei` varchar(50) COLLATE utf8_bin DEFAULT NULL,
  `tag` varchar(20) COLLATE utf8_bin DEFAULT NULL COMMENT '用户兴趣标签',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

测试数据

select imei,tagname from test.dsp_user_media_tag limit 10;

在这里插入图片描述
在这里插入图片描述

创建函数

实现用户多标签的合并

drop FUNCTION  if EXISTS test.get_user_media_tag;
create FUNCTION test.get_user_media_tag(user_id VARCHAR(40))
RETURNS text
BEGIN
	DECLARE tags text DEFAULT '';
	DECLARE tag VARCHAR(64) default '';
	DECLARE a int DEFAULT 0;
	DECLARE cur_tags CURSOR for select a.tagname from test.dsp_user_media_tag a where a.imei=user_id;
	DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET a=1; 
	OPEN cur_tags;
	while a<>1 DO
		FETCH cur_tags into tag;
		set tags = CONCAT(tags,tag);
	END WHILE;
	CLOSE cur_tags;
	RETURN tags;
END;

调用函数

select imei,test.get_user_media_tag(imei) from (select DISTINCT imei from test.dsp_user_interest_tag) u;

附存储过程创建调用方式

drop PROCEDURE if EXISTS test.combine_tags;
create PROCEDURE test.combine_tags()
BEGIN
DECLARE uid VARCHAR(40) DEFAULT '';
DECLARE a int DEFAULT 0;
DECLARE ut text DEFAULT '';
DECLARE user CURSOR FOR  SELECT DISTINCT b.imei from test.dsp_user_interest_tag b;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET a=1; 
OPEN user;
  FETCH user into uid;
  while a<>1 do
     set ut = CONCAT(ut,test.get_user_media_tag(uid));
     select uid,ut;
   FETCH  user into uid;
  end while;
CLOSE user;
END;
call test.combine_tags();		--调用存储过程
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值