2010-10-10 50 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