Mysql中使用存储过程返回查询多个表的数据信息
2017-06-08 13:02
507 查看
-- 测试手机号 call P_Base_CheckLogin('15584463676'); -- 测试登录名 call P_Base_CheckLogin('sch000001') -- 测试身份证号 call P_Base_CheckLogin('080428402304032042') -- 测试学生手机号 call P_Base_CheckLogin('13019212198') drop PROCEDURE IF EXISTS P_Base_CheckLogin; create procedure P_Base_CheckLogin(v_loginName VARCHAR(255)) label: BEGIN -- 手机号匹配 SELECT v_loginName REGEXP "^[1][35678][0-9]{9}$" into @checkResult; if @checkResult=1 then select p.person_id,p.identity_id,p.person_name into @person_id,@identity_id,@person_name from t_base_person p where p.tel=v_loginName limit 1; if @person_id is not null THEN select l.login_name,l.login_password into @login_name,@login_password from t_sys_loginperson l where l.person_id=@person_id and l.IDENTITY_ID=@identity_id; select @login_name as USER_NAME,@person_id as PERSON_ID,@identity_id as IDENTITY_ID ,@person_name as REAL_NAME,@login_password as PASSWORD; LEAVE label; end if; -- 学生的手机号匹配 select p.student_id,6 as identity_id into @person_id,@identity_id from t_base_student as p where p.STU_TEL=v_loginName limit 1; if @person_id is not null THEN select l.login_name,l.login_password into @login_name,@login_password from t_sys_loginperson l where l.person_id=@person_id and l.IDENTITY_ID=@identity_id; select @login_name as USER_NAME,@person_id as PERSON_ID,@identity_id as IDENTITY_ID ,@person_name as REAL_NAME,@login_password as PASSWORD; LEAVE label; end if; end if; -- 身份证号匹配 select f_base_check_id_number(v_loginName) into @checkResult; if @checkResult=1 then select person_id,identity_id,person_name into @person_id,@identity_id,@person_name from t_base_person p where p.IDENTITY_NUM=v_loginName limit 1; if @person_id is not null THEN select l.login_name,l.login_password into @login_name,@login_password from t_sys_loginperson l where l.person_id=@person_id and l.IDENTITY_ID=@identity_id; select @login_name as USER_NAME,@person_id as PERSON_ID,@identity_id as IDENTITY_ID ,@person_name as REAL_NAME,@login_password as PASSWORD; LEAVE label; end if; end if; -- 正常登录名查询 select l.login_name,person_id,identity_id,l.person_name,l.login_password into @login_name,@person_id,@identity_id,@person_name,@login_password from t_sys_loginperson l where l.login_name=v_loginName limit 1; if @person_id is not null THEN select @login_name as USER_NAME,@person_id as PERSON_ID,@identity_id as IDENTITY_ID ,@person_name as REAL_NAME,@login_password as PASSWORD; LEAVE label; end if; END;
drop function if EXISTS f_base_check_id_number; CREATE FUNCTION `f_base_check_id_number`(`idnumber` CHAR(18)) RETURNS enum('1','0') LANGUAGE SQL NOT DETERMINISTIC NO SQL SQL SECURITY DEFINER COMMENT '' BEGIN DECLARE status ENUM('1','0') default '0'; DECLARE verify CHAR(1); DECLARE sigma INT; DECLARE remainder INT; IF length(idnumber) = 18 THEN set sigma = cast(substring(idnumber,1,1) as UNSIGNED) * 7 +cast(substring(idnumber,2,1) as UNSIGNED) * 9 +cast(substring(idnumber,3,1) as UNSIGNED) * 10 +cast(substring(idnumber,4,1) as UNSIGNED) * 5 +cast(substring(idnumber,5,1) as UNSIGNED) * 8 +cast(substring(idnumber,6,1) as UNSIGNED) * 4 +cast(substring(idnumber,7,1) as UNSIGNED) * 2 +cast(substring(idnumber,8,1) as UNSIGNED) * 1 +cast(substring(idnumber,9,1) as UNSIGNED) * 6 +cast(substring(idnumber,10,1) as UNSIGNED) * 3 +cast(substring(idnumber,11,1) as UNSIGNED) * 7 +cast(substring(idnumber,12,1) as UNSIGNED) * 9 +cast(substring(idnumber,13,1) as UNSIGNED) * 10 +cast(substring(idnumber,14,1) as UNSIGNED) * 5 +cast(substring(idnumber,15,1) as UNSIGNED) * 8 +cast(substring(idnumber,16,1) as UNSIGNED) * 4 +cast(substring(idnumber,17,1) as UNSIGNED) * 2; set remainder = MOD(sigma,11); set verify = (case remainder when 0 then '1' when 1 then '0' when 2 then 'X' when 3 then '9' when 4 then '8' when 5 then '7' when 6 then '6' when 7 then '5' when 8 then '4' when 9 then '3' when 10 then '2' else '/' end ); END IF; IF right(idnumber,1) = verify THEN set status = '1'; END IF; RETURN status; END
SELECT PERSON_ID,IDENTITY_ID,PERSON_NAME as REAL_NAME,LOGIN_NAME as USER_NAME FROM ( select p.person_id,p.identity_id,p.person_name,p.tel as inputname,l.login_name from t_base_person p join t_sys_loginperson l on p.person_id= l.person_id and p.identity_id= l.identity_id union select p.person_id,p.identity_id,p.person_name,p.IDENTITY_NUM as inputname,l.login_name from t_base_person p join t_sys_loginperson l on p.person_id= l.person_id and p.identity_id= l.identity_id union select l.person_id,l.identity_id,l.person_name,s.STU_TEL as inputname,l.login_name from t_base_student s join t_sys_loginperson l on s.student_id = l.person_id and l.identity_id =6 union select person_id,identity_id,l.person_name,l.login_name as inputname,l.login_name from t_sys_loginperson l ) t WHERE t.inputname = '15584463676'
相关文章推荐
- MYSQL使用存储过程插入中文数据的疑似bug(UTF8)
- 使用mysql_fetch_row()以数组的形式返回查询结果
- mysql存储过程---返回列表数据需要用到游标
- 分享:在存储过程中使用另一个存储过程返回的查询结果集的方法
- [PHP]如何在百度(BAE)和新浪(SAE)的云平台使用PHP连接MySQL并返回结果数据
- MYSQL使用存储过程插入中文数据的疑似bug(UTF8)
- SAE中使用MySQL查询数据
- 【转】MySQL时间函数的使用:查询本周、下周、本月、下个月份的数据
- 使用mysql_fetch_row()以数组的形式返回查询结果
- 使用ajax从MySql读数据,根据表中的经纬度信息在地图上打点
- 使用mysql_fetch_object()以对象的形式返回查询结果
- mysql java使用PreparedStatement插入数据并返回id的代码
- SQL Server 2008空间数据应用系列十:使用存储过程生成GeoRSS聚合空间信息
- asp.net调用mysql 存储过程 带 out 返回值,返回刚插入数据库中的自增的ID,LAST_INSERT_ID() 的使用
- 如何使用数据查询的Parameters中的output属性取的返回值
- SQL Server 2008空间数据应用系列十:使用存储过程生成GeoRSS聚合空间信息
- 在存储过程中使用另一个存储过程返回的查询结果集
- 在Action中查询出SQL SERVER表的数据,返回一个list。怎么在JSP页面中使用Struts标签,显示出表中的内容?(转)
- mysql 返回查询结果,返回out返回值,多表联合查询的分页存储过程
- MySql 使用存储过程和游标读取并更新数据