CakePHP用MAX和group by查找

时间:2017-10-17 19:04:55

标签: mysql cakephp cakephp-2.0

我有一个包含多个用户记录的表,例如他们的登录日期和IP地址。

因此,我希望在过去n天内获取数据库中每个用户的最后一个IP地址或上次登录日期。

当我尝试在cakephp find中使用"group"时,它没有显示正确的记录:

$data = $this->Login->find('all',
    array(
          'conditions'=>array('Login.last_login_date<='=>$d),
          'group'=>'Login.user_id',
          'order'=>array('Login.last_login_date'=>'DESC'),
          'fields' => array('MAX(Login.last_login_date) AS last_login_date', '*','User.*')
    )
);

这可能是什么原因?

1 个答案:

答案 0 :(得分:0)

通过登录日期desc订购,您走在正确的轨道上。实际上,您不需要在此处找到登录日期的MAX。如果您想获得上次登录日期,请按登录日期降序排序。分组后的登录日期值是最后一个登录日期。

$data = $this->Login->find('all', array(
    // Assuming that the login date column is login_date here
    'conditions' => array('Login.login_date <=' => $d), 
    'group' => 'Login.user_id',
    'order' => array('Login.login_date' => 'DESC'), 
    'fields' => array('*', 'User.*')
));