代码之家  ›  专栏  ›  技术社区  ›  Sao Ho

yii\db\query()中的yii2数学

  •  -1
  • Sao Ho  · 技术社区  · 6 年前

    我想做一些数学运算(除法,减法,加…),两个或多个字段的值正在使用一个yii数据库查询,如下所示。我能这样做吗?

     $data = (new \yii\db\Query())
     ->select([
      'date',
      'SUM( IF(status = "Passed", 1, 0) ) AS passed',
      'SUM( IF(status = "Failed", 1, 0) ) AS failed',
      'SUM( IF(status = "On Hold", 1, 0) ) AS onhold',
      'passed/onhold as selfsubmit',
      'COUNT(*) AS total'
     ])
     ->from('qa3d')
     ->groupBy('date')
     ->all();
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   Peter Mortensen icecrime    6 年前

    首先,在使用MySQL的同一个查询中,不能使用别名进行算术(数学)。那 is mentioned here 也。

    但是你可以用 yii\db\Expression 类,因为这样,框架就不会尝试将表达式作为mysql列进行转义。

    所以基本上你必须选择不带别名的表达式 Expression 班级。

    例如:

    $data = (new \yii\db\Query())
        ->select([
            'date',
            'SUM( IF(status = "Passed", 1, 0) ) AS passed',
            'SUM( IF(status = "Failed", 1, 0) ) AS failed',
            'SUM( IF(status = "On Hold", 1, 0) ) AS onhold',
            new \yii\db\Expression('SUM( IF(status = "Passed", 1, 0) ) / SUM( IF(status = "On Hold", 1, 0) ) AS selfsubmit'),
            'COUNT(*) AS total'
        ])
        ->from('qa3d')
        ->groupBy('date')
        ->all();