2010-10-10 54 views
0

我有2种型号,用户和演变。用户有很多Evolution,Evolution属于User。查找CakePHP的条件与中可容纳的行为

我有10个000用户,我想这样做,给我500级的用户没有今天的演进表日期的条件。

本来,我走的每一个用户表,然后我一直在寻找,如果他们有自己的行中演进,如:

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

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

,然后寻找,如果有一排或不:

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

但我认为这是愚蠢的farely取10个000用户和foreach他们都只拿500

我该怎么办我发现直接有500个用户没有今天的日期在Evolution表中。

谢谢!

回答

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 
) 

这样,你在变阵表格中进行搜索,而是因为他们有联系,你将有用户的每一个进化的纪录。

问题会来,如果有每天超过一个进化,但你可以用MAX()莫名其妙地玩。

+0

,因为我想找到没有$ LASTUPDATE演变那是行不通的。 – 2010-10-11 00:02:16

+0

我已经更新了答案。基本上SpawnCxy给你的条件:) – 2010-10-11 06:24:26

+0

,因为我想知道哪些用户没有今天的进化行这可不行解决方案。通过这样的条件,我会在每个其他人的日子里得到我所需要的信息。 – 2010-10-11 11:13:57

1

如何

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

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

这样你将限制进化,但用户和进化之间的关系将保持不变,你可能会在结果中也有今天内更新的用户。但条件部分是正确的。 – 2010-10-11 06:23:43