Yii 分组统计 SQL 查询写法(group by count)
最终写出的查询语句:
// 近30天的销量
private function last30DaySale($storeIdArr)
{
$time_30day = strtotime('-30 days');
$list = Order::find()
->andWhere(['in', 'storeId', (array) $storeIdArr])
->andWhere(['>', 'createdAt', $time_30day])
->andWhere(['in', 'state', [2,3,4,5,6]])
->groupBy('storeId')
->select('storeId, count(*) as total')
->asArray()
->all();
$list = $this->keyBy($list, 'storeId');
return $list;
}
private function keyBy($arr, $by_key)
{
$key_arr = array_column($arr, $by_key);
$res_arr = array_combine($key_arr, $arr);
return $res_arr;
}
这里面用到了 where in、where >、group by count(*) 用法。因为同时用了 groupBy 和 select('storeId, count(*) as total') 进行分组统计,不能直接用 all() 获取所有的结果,需要先使用 asArray() 转化再 all()。
以下是写这个查询所参考的资料:
...->createCommand()->getRawSql();
开启SQL日志的方法,略麻烦。。
$query=Information::find()->groupBy('insertion_time')->alias('a')->select('count(*) as total,a.*')->all();
->where([
'in', 'id', [1, 3, 5, 6]
])
->where([
'not in', 'id', [1, 2, 4, 3]
])
5、学习使用yii2框架查询数据库model的超详解说并举例
较全面!TP也需要一篇这样的查询语句使用的总结文章!
官方的,没啥好说的,慢慢看。
-EOF-
本文来自博客园,作者:imzhi,转载请注明原文链接:https://www.cnblogs.com/imzhi/p/yii-sql-write-method.html