cakephp 3.0 + group by + count + paginate

时间:2015-05-28 11:32:36

标签: mysql cakephp-3.0

我有一个桌面用户和另一个桌面游戏。

现在用户将创建游戏。现在我想要用户列表和他创建的游戏数量。

下面的查询将完全输出(IN PHPMYADMIN)我想要的内容。 但我不知道如何在cakephp 3.0中解雇这样的查询:

SELECT `users`.`id`,`firstname`,`lastname`,(select count(id) from games where games.created_by=users.id) FROm users group by `users`.`id`

3 个答案:

答案 0 :(得分:5)

在您的控制器中:

$users = $this->Users->find('all', [
        'fields' => [
            'id' => 'Users.id',
            'firstname' => 'firstname',
            'lastname' => 'lastname',
            'count_games' => 'COUNT(games.id)'
        ],
        'join' => [
            'table' => 'games', 
            'type' => 'LEFT',
            'conditions' => 'games.created_by = Users.id'
        ],
        'group' => ['Users.id'],
]);
$this->set('users', $users);
$this->set('_serialize', ['users']);

答案 1 :(得分:0)

我使用下面的代码进行排序

<th><?= $this->Paginator->sort('count_games_created','Number of games created') ?></th>
<th><?= $this->Paginator->sort('count_games_joined','Number of games attended') ?></th>

答案 2 :(得分:0)

经过大量研究后,我找到了一个非常好的解决方案:CounterCache

每当您向game添加新的user时,用户表中的游戏数量game_count都会更新。 它有效,而且是更快解决方案。