项目中需要查询一个完成度大于60%的数据,需要2列数据做一个计算后根据结果排序。
如果使用别名会报错,字段pct不存在。
因为sql的执行顺序,是在where后 order by之前加的别名,及生成结果集后加别名,where是生成结果集之前的操作,order by 是生成结果集后的操作,因为where要生成结果集,而order by 是对结果集操作。
使用派生表解决:
select * from ( select total as A, nums as B... from tablename ) aaa where A=1 order by A
使用别名会报错:
//完成度, $complete_percent=60
$fields = '*';
if($complete_percent != ''){
$fields = '*,((total-surplus)/total) as pct';
$map['pct'] = ['pct', 'gt', $complete_percent/100]
}
$list = $model->field($fields)
->where(array_values($map))
->order($_order,$_sort)
->paginate($pagesize);
正确的姿势:
//完成度, $complete_percent=60
$fields = '*';
if($complete_percent != ''){
$fields = '*,((total-surplus)/total)';
}
$list = $model->field($fields)
->where(array_values($map))
->where(function ($query) use($complete_percent){
if($complete_percent != ''){
$query->where('((total-surplus)/total) > '.($complete_percent/100) );
}
})
->order($_order,$_sort)
->paginate($pagesize);
make:
https://blog.csdn.net/weixin_33816946/article/details/92052266