如何在yii2中计数和分组

dea*_*acs 19 php mysql yii2

我想使用yii2生成以下查询:

SELECT COUNT(*) AS cnt FROM lead WHERE approved = 1 GROUP BY promoter_location_id, lead_type_id

我试过了:

$leadsCount = Lead::find()
->where('approved = 1')
->groupBy(['promoter_location_id', 'lead_type_id'])
->count();
Run Code Online (Sandbox Code Playgroud)

哪个生成此查询:

SELECT COUNT(*) FROM (SELECT * FROM `lead` WHERE approved = 1 GROUP BY `promoter_location_id`, `lead_type_id`) `c`
Run Code Online (Sandbox Code Playgroud)

在yii 1.x中我会做以下事情:

$criteria = new CDbCriteria();
$criteria->select = 'COUNT(*) AS cnt';
$criteria->group = array('promoter_location_id', 'lead_type_id');
Run Code Online (Sandbox Code Playgroud)

谢谢!

dea*_*acs 26

解:

$leadsCount = Lead::find()
->select(['COUNT(*) AS cnt'])
->where('approved = 1')
->groupBy(['promoter_location_id', 'lead_type_id'])
->all();
Run Code Online (Sandbox Code Playgroud)

并添加public $cnt到模型,在我的情况下铅.

正如Kshitiz所说,你也可以使用yii\db\Query::createCommand().

  • 这有效,我不得不将公共变量添加到模型类并由@deacs 提及,并用 `->createCommand()->queryAll(); 替换 all() 方法另请注意,我的 select() 方法有多个`->select(['type, date(important_timestamp) AS important_timestamp, COUNT(*) AS size'])` (2认同)

Kai*_*las 9

您可以使用select Query中的count()来获取计数

$leadCount = Lead::find()
->where(['approved'=>'1'])
->groupBy(['promoter_location_id', 'lead_type_id'])
->count();
Run Code Online (Sandbox Code Playgroud)

参考链接用于选择查询的各种功能


小智 8

如果您只对计数感兴趣,请yii\db\Query按照其他人的说法使用.不需要对您的模型进行任何更改:

$leadsCount = (new yii\db\Query())
    ->from('lead')
    ->where('approved = 1')
    ->groupBy(['promoter_location_id', 'lead_type_id'])
    ->count();
Run Code Online (Sandbox Code Playgroud)

这是Yii2 API文档的链接