虚拟字段并在CakePHP中使用HAVING

时间:2013-04-02 06:32:16

标签: php mysql cakephp

我需要从mysql中找到那些具有唯一test字段的行。我尝试添加virtualFields以获取test的计数,然后按test字段进行分组,并检查该测试必须等于1.

以下是我的代码......它出错:Syntax error or access violation

public function index()
{
    $this -> User -> virtualFields(array(
        'countTest' => "COUNT(User.test)"
    ));

    $users = $this -> User -> find('all', array(
        'conditions' => array('countTest' => 1),
        'group' => 'User.test'
    )); 

    pr($users); die;
}

我找到了解决问题的MySql查询:'SELECT test, COUNT(*) as count FROM users GROUP BY test HAVING COUNT(*) = 1';

您能否以CakePHP格式转换上述查询。

1 个答案:

答案 0 :(得分:2)

这样的事情可以引导你找到正确的解决方案

$this->User->find('all', array(
    'fields' => array('User.test', 'COUNT(User.test) AS User__test_count'),
    'group' => array('User.test'),
    // or even cake style SQL injection :)
    // 'group' => array('User.test HAVING COUNT(*) = 1')
  ));