• mysql存储过程


    DELIMITER ;;        /*重新定义结束符,存储过程结束要定义回来,成对使用,主要是END;;在使用*/
    CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_calculate_user_active_strategy`(               /* CREATE DEFINER=`root`@`localhost` 为定义权限,此为默认值 */
      in user_id varchar(36),          /*in是传入的参数,user_id是参数名, varchar(36)是类型.注意参数名尽量不与数据库字段重名,容易造成数据库判断时混淆,或者使用u.id = id也行*/
    in platform tinyint,
    out strategy_id varchar(36)                             /*输出参数,需要select 才能获取到这个值*/
    )                                                                       /*BEGIN和END是查询语句的开始和结束*/
    BEGIN
      -- 用户直属部门的full_department_id
      declare user_full_department_id varchar(1000);          /*声明变量,与var同一功能*/
    /*
    变量赋值的方法:
    1.set var_name=expression
    2.select field_name into var_name     field_name可以是重命名的字段
    */
    -- 获取当前用户所在部门的全路径
    select d.full_department_id into user_full_department_id from user u   
        inner join department d on u.department_id = d.id
          where u.id = user_id;
     /*
    联合查询,从结果集中查询
    select s_id into strategy_id from (() union ()) rs;
     rs为结果集的名称
    union是合集,并去重
    s.id as s_id, s.weight as s_weight 将每一条语句查询出来的结果,合并在一起组成新的合集
    然后select s_id into strategy_id from 从合集中查出s_id
    */
    select s_id into strategy_id from (
        -- 在strategy_user表中找到权重最高的 strategy_id
        (select s.id as s_id, s.weight as s_weight from strategy_user su
          inner join strategy s on su.strategy_id = s.id
            where su.user_id = user_id and s.platform = platform
              order by s.weight desc limit 1)
        union                                 
        -- 在strategy_department表中找到权重最高的 strategy_id
        (select s.id as s_id, s.weight as s_weight from strategy_department sd
          inner join strategy s on sd.strategy_id = s.id
          inner join department d on sd.department_id = d.id
            where d.full_department_id = substring(user_full_department_id, 1, char_length(d.full_department_id)) and s.platform = platform
              order by s.weight desc limit 1)
        /*
    union
        -- 在strategy_group表中找到权重最高的 strategy_id
        (select s.id as s_id, s.weight as s_weight from strategy_group sg
          inner join strategy s on sg.strategy_id = s.id
          inner join `group` g on sg.group_id = g.id
            where s.platform = platform and g.id in (select distinct group_id from group_user where user_id = user_id)
              order by s.weight desc limit 1)
    */
      ) rs order by rs.s_weight desc limit 1;
    END ;;
    DELIMITER ;
     
  • 相关阅读:
    [C4] 前馈神经网络(Feedforward Neural Network)
    [C3] 正则化(Regularization)
    [C2] 逻辑回归(Logistic Regression)
    [C1] 线性回归(Linear Regression)
    Python基础学习
    装饰器
    完全理解Python迭代对象、迭代器、生成器
    django自己搭建的博客
    git学习,哇瑟说实话我想要的
    类继承和多态,子类重写构造函数,多重继承学习
  • 原文地址:https://www.cnblogs.com/jay--zhang/p/7998977.html
Copyright © 2020-2023  润新知