【问题标题】:codeigniter and mysql user-defined variables not workingcodeigniter 和 mysql 用户定义的变量不起作用
【发布时间】:2013-07-04 12:00:50
【问题描述】:

CodeIgniter 版本:2.1.3
MySQL 版本:5.5.30
MySQL 引擎:MyISAM

查询:

$query = "INSERT INTO new_table
      (
        user_id,
        cut_off_pay,
        total_days,
        rate_per_day,
        rate_per_hour,
      )
      (
        SELECT
          u.id,
          @cut_off_pay := (u.current_salary / 2) ,
          @total_days := 10,
          @rate_per_day := (@cut_off_pay / @total_days),
          @rate_per_hour := (@rate_per_day / 8)
        FROM attendance a
        LEFT JOIN users u
          ON a.user_id = u.id
        WHERE a.user_id = u.id
        GROUP BY a.user_id
      )";              
$this->db->query($query);

用户定义的变量(@cut_off_pay、@total_days 等)不起作用,它返回 0/NULL 值

【问题讨论】:

    标签: mysql codeigniter variables


    【解决方案1】:

    恕我直言

    1. 您不需要任何用户变量
    2. 在您的情况下,您不需要 WHERE 子句来重复连接条件
    3. 而且您甚至不需要将usersattendance 表连接起来,因为您不使用其中的任何值,并且可以在其左侧选择LEFT JOINattendance 表非常值得怀疑

    话虽如此

    $query = "INSERT INTO new_table
              (
                user_id,
                cut_off_pay,
                total_days,
                rate_per_day,
                rate_per_hour
              )
              SELECT u.id,
                     u.current_salary / 2          cut_off_pay,
                     10                            total_days,
                     u.current_salary / 2 / 10     rate_per_day,
                     u.current_salary / 2 / 10 / 8 rate_per_hour
                FROM attendance a LEFT JOIN users u
                  ON a.user_id = u.id
               GROUP BY a.user_id";
    

    你甚至不需要为你的选择中的派生列提供别名,因为你插入了它们,但这只会提高可读性,你总是可以单独使用该选择,例如用于测试目的

    或者干脆

    $query = "INSERT INTO new_table
              (
                user_id,
                cut_off_pay,
                total_days,
                rate_per_day,
                rate_per_hour
              )
              SELECT id,
                     current_salary / 2          cut_off_pay,
                     10                            total_days,
                     current_salary / 2 / 10     rate_per_day,
                     current_salary / 2 / 10 / 8 rate_per_hour
                FROM users";
    

    【讨论】:

      猜你喜欢
      • 2021-07-21
      • 1970-01-01
      • 2021-06-26
      • 1970-01-01
      • 2017-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-12
      相关资源
      最近更新 更多