在cakePHP中查找具有可包含行为的条件

时间:2010-10-10 20:23:19

标签: php mysql database cakephp model

我有2个模型,User和Evolution。用户有很多Evolution,Evolution属于User。

我有10 000个用户,我想做一个条件,给我500个用户,这些用户在今天的Evolution表中没有今天的日期。

最初,我在USER表中选择了每一个,然后我在寻找他们在Evolution中的行如下:

$user=$this->User->find('all',array('contain' => array(

                'Evolution' => array('conditions' => array('date'=>$lastupdate))
            ),
        'fields' => array(
            'name',
            'id',
        )
    ));

然后查看是否有一行:

if(empty($user['Evolution']))
        {

但我认为吸引10 000名用户并将他们全部带到500人之后,这是非常愚蠢的。

如何让我的发现直接拥有500个在Evolution表中没有今天日期的用户。

谢谢!

2 个答案:

答案 0 :(得分:1)

做这样的事情怎么样:

$evolutions = $this->User->Evolution->find('all', 
        array(
             'conditions'=>array('date !='=>$lastupdate),
             'fields'=>array('MAX(date) as max_date', 'user_id', 'User.name', 'User.email'),
             'group'=>array('user_id', 'User.name', 'User.email')
        ),
        'contain'=>array('User'),
        'limit'=>500
)

这样,您可以在evolutions表中进行搜索,但由于它们是相互关联的,因此您将拥有每次演变的用户记录。

如果每天进行多次演变,问题就会出现,但是你可以用某种方式玩MAX()。

答案 1 :(得分:1)

怎么样

$user=$this->User->find('all',array('contain' => array(

            'Evolution' => array('conditions' => array('date !='=>$lastupdate))
        ),
    'fields' => array(
        'name',
        'id',
    )
    'limit'=>500
));