在cakePHP中查找具有可包含行为的条件
我有两个模型,用户和进化。用户有很多进化,进化属于用户 我有10000个用户,我想做一个条件,给我500个在进化表中没有今天日期的用户 最初,我对用户表中的每一个都进行了检查,然后我查看它们是否在进化中有这样的行:在cakePHP中查找具有可包含行为的条件,php,mysql,database,cakephp,model,Php,Mysql,Database,Cakephp,Model,我有两个模型,用户和进化。用户有很多进化,进化属于用户 我有10000个用户,我想做一个条件,给我500个在进化表中没有今天日期的用户 最初,我对用户表中的每一个都进行了检查,然后我查看它们是否在进化中有这样的行: $user=$this->User->find('all',array('contain' => array( 'Evolution' => array('conditions' => array('date'=>
$user=$this->User->find('all',array('contain' => array(
'Evolution' => array('conditions' => array('date'=>$lastupdate))
),
'fields' => array(
'name',
'id',
)
));
然后看看是否有争吵:
if(empty($user['Evolution']))
{
但我认为这是非常愚蠢的,拿10000个用户,然后让他们都只拿500个
我怎样才能直接找到500个在进化表中没有今天日期的用户呢
谢谢 这样做怎么样:
$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表中搜索,但因为它们是链接的,所以您将拥有每个evolutions的用户记录
如果每天有不止一次进化,问题就会出现,但是你可以用MAX()玩。怎么样
$user=$this->User->find('all',array('contain' => array(
'Evolution' => array('conditions' => array('date !='=>$lastupdate))
),
'fields' => array(
'name',
'id',
)
'limit'=>500
));
这不起作用,因为我想找到没有$lastupdate的进化。我已经更新了答案。基本上,SpawnCxy为您提供了条件的解决方案:)这无法工作,因为我想知道哪个用户没有今天的evolution行。通过这样做,我将获得其他用户的一天,所以我没有我需要的信息。正如我告诉你的,你可以与MAX和GROUP By玩-查看更新的答案。这样你将限制进化,但是用户和进化之间的关系将保持不变,你可以在结果中找到在今天更新的用户。但条件部分是正确的。