\yii\db\Query() 中的 Yii2 数学
Yii2 math in \yii\db\Query()
我想做一些数学运算(除、减、加...),两个或更多字段的值正在使用 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();
首先,您不能在使用 MySQL 的同一查询中使用别名进行算术运算(数学)。那is mentioned here也是。
但是您可以使用 yii\db\Expression
class 进行计算,因为这样,框架就不会尝试将表达式转义为 MySQL 列。
所以基本上你必须 select 没有别名和 Expression
class.
的表达式
例如:
$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();
我想做一些数学运算(除、减、加...),两个或更多字段的值正在使用 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();
首先,您不能在使用 MySQL 的同一查询中使用别名进行算术运算(数学)。那is mentioned here也是。
但是您可以使用 yii\db\Expression
class 进行计算,因为这样,框架就不会尝试将表达式转义为 MySQL 列。
所以基本上你必须 select 没有别名和 Expression
class.
例如:
$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();