2010-10-10 5 views
0

J'ai 2 modèles, utilisateur et évolution. L'utilisateur a de nombreux Evolution, Evolution appartient à l'utilisateur.Trouver la condition dans le gâteauPHP avec le comportement Containable

J'ai 10 000 utilisateurs et je veux faire une condition qui me donne 500 utilisateurs qui n'ont pas de date d'aujourd'hui dans la table Evolution.

A l'origine, je prenais tout le monde dans la table USER et je cherchais si elles avaient leur rang dans l'évolution comme:

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

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

puis recherche s'il y avait une rangée ou non:

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

Mais je pense que c'est farely stupide de prendre 10 000 utilisateurs et foreach tous juste prendre 500.

Comment puis-je faire ma trouvaille d'avoir directement 500 utilisateurs qui ne possèdent pas la date d'aujourd'hui dans la table Evolution.

Merci!

Répondre

1

Qu'en est-il de faire quelque chose comme ceci:

$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 
) 

De cette façon, vous rechercher dans le tableau des évolutions, mais parce qu'ils sont liés vous aurez l'enregistrement de l'utilisateur pour chaque évolution.

Le problème viendra s'il y a plus d'une évolution par jour, mais alors vous pouvez jouer avec MAX() en quelque sorte.

+0

Cela ne fonctionne pas parce que je veux trouver l'évolution qui ne disposent pas de lastupdate $. –

+0

J'ai mis à jour la réponse. Fondamentalement, le SpawnCxy vous donne la solution pour les conditions :) –

+0

Cela ne peut pas fonctionner parce que je veux savoir quel utilisateur n'a pas la ligne d'évolution d'aujourd'hui. En faisant cette condition, j'obtiendrai le jour de chaque utilisateur de sorte que je n'ai pas l'information dont j'ai besoin. –

1

Que diriez-vous

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

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

De cette façon, vous limiterez l'évolution, mais la relation entre l'utilisateur et l'évolution sera inchangée et vous pourriez avoir dans le résultat aussi des utilisateurs qui a mis à jour aujourd'hui. Mais la partie condition est correcte. –

Questions connexes