【问题标题】:Find condition in cakePHP with Containable behavior在 cakePHP 中查找具有可包含行为的条件
【发布时间】:2010-10-10 20:23:19
【问题描述】:

我有 2 个模型,用户和进化。 User 有很多 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 名用户是非常愚蠢的。

我怎样才能找到直接在 Evolution 表中没有今天日期的 500 个用户。

谢谢!!

【问题讨论】:

    标签: php mysql database cakephp model


    【解决方案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()。

    【讨论】:

    • 那行不通,因为我想找到没有 $lastupdate 的进化。
    • 我已经更新了答案。基本上 SpawnCxy 为您提供条件的解决方案:)
    • 这行不通,因为我想知道哪个用户没有今天的进化行。通过执行此条件,我将获得其他用户的所有信息,因此我没有所需的信息。
    • 我告诉过你,你可以使用 MAX 和 GROUP BY - 查看更新后的答案。
    【解决方案2】:

    怎么样

    $user=$this->User->find('all',array('contain' => array(
    
                'Evolution' => array('conditions' => array('date !='=>$lastupdate))
            ),
        'fields' => array(
            'name',
            'id',
        )
        'limit'=>500
    ));
    

    【讨论】:

    • 这样你会限制进化,但是用户和进化之间的关系不会改变,你可以在结果中还有今天更新的用户。但条件部分是对的。
    猜你喜欢
    • 2015-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-21
    • 1970-01-01
    • 1970-01-01
    • 2012-11-10
    • 2013-12-18
    相关资源
    最近更新 更多