MySql方法的编写

需求分析:

1、根据用户隐私设置判断用户是否对所有人展示姓名或对满足条件的人员展示真实姓名;

2、如果用户对所有人公开显示真实姓名,则不对姓名做处理;

3、如果用户仅对满足条件的用户显示真实姓名,则对不满足条件的用户姓名做处理;

4、如果用户未进行隐私设置,则需要对真实姓名做处理;

备注:真实姓名处理过程为如果用户性别为男则显示姓名第一个字+先生,如果性别为女则显示姓名第一个字+女士,如果性别未知则用姓名第一个字+*号补全。

编写方法:

1、真实姓名处理方法:

CREATE FUNCTION user_name_format(real_name VARCHAR(500), sex VARCHAR(500))
    RETURNS varchar(500)
BEGIN
    # 需返回的字符串
	DECLARE return_str VARCHAR(500) DEFAULT NULL;
    # 真实姓名长度
	DECLARE str_len INT DEFAULT 0;
    # *号代替时,需要补全的次数=i+1
	DECLARE i INT DEFAULT 0;
    # 获取真实姓名首个字母
	set return_str = substr(real_name, 1, 1);
    # 根据传入的性别值处理
	if sex = '0' then
		set return_str = concat(return_str, '先生');
	elseif sex = '1' then
		set return_str = concat(return_str, '女士');
	else 
		set str_len = CHAR_LENGTH(str) - 1;
		WHILE i < str_len DO
			set return_str = CONCAT(return_str,'*');
			set i=i+1;
		END WHILE;
	end if;
	RETURN return_str;
END

2、查询设置是否显示真实姓名:

CREATE FUNCTION is_show_real_name(user_id bigint)
    RETURNS varchar(500)
BEGIN
	DECLARE is_show VARCHAR(500) DEFAULT '0';
	select sups.show_real_name into is_show from sys_user sups where sups.user_id = user_id;
	RETURN is_show;
END

3、查询满足的身份条件:

CREATE FUNCTION is_friend(user_id bigint,other_user_id bigint)
    RETURNS varchar(500)
BEGIN
	DECLARE common_ids VARCHAR(500) DEFAULT NULL;
	SELECT GROUP_CONCAT(suaa_1.academic_id) INTO common_ids
        FROM sys_user_academic_auth suaa_1,
             sys_user_academic_auth suaa_2
        WHERE suaa_1.user_id = user_id
          AND suaa_2.user_id = other_user_id
          AND suaa_1.academic_id= suaa_2.academic_id
          AND suaa_1.audit_status = '2'
          AND suaa_2.audit_status = '2';
	RETURN common_ids;
END

4、获取用户的真实姓名

CREATE FUNCTION get_user_real_name(user_id bigint, other_user_id bigint, real_name VARCHAR(500), sex VARCHAR(500))
    RETURNS varchar(500)
BEGIN
	DECLARE return_str VARCHAR(500) DEFAULT NULL;
    # 对所有人显示真实姓名
	if is_show_real_name(user_id) = '1' THEN
		set return_str = real_name;
    # 只对满足条件的用户显示真实姓名
	ELSEIF is_show_real_name(user_id) = '2' and is_friend(user_id, other_user_id) is not null THEN
		set return_str = real_name;
    # 未设置显示真实姓名
	ELSE
		set return_str = user_name_format(real_name, sex);
	end IF;
	RETURN return_str;
END

总结:

1、mysql中使用了CHAR_LENGTH(中文)函数来计算中文的长度;

2、mysql中使用if elseif else end if;结构来做条件判断,多个条件用户and/or连接;

3、mysql中使用while 条件 do 事件 end while;循环做数据处理;

4、mysql方法中使用declare 变量名 类型 default 默认值;声明变量;使用set 变量=值来赋值;

5、mysql方法结构为create function 方法名(变量名 变量类型, ...) returns 返回值类型 begin 方法体 return 返回值; end;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星辰寰宇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值