CakePHP:选择拥有1个或更多帖子的用户

时间:2012-09-27 23:51:21

标签: php mysql cakephp

我有两个表:usersposts。我正在尝试选择至少有一个帖子的用户。

我猜这需要连接或子选择。 CakePHP中有什么东西能让这个变得简单吗?

2 个答案:

答案 0 :(得分:1)

这应该选择所有发布1个帖子或更多帖子的用户

SELECT * FROM `users` as u
INNER JOIN `posts` as p ON p.user_id = u.id

在蛋糕中,您应该能够做到这样的事情:

$this->User->find('all', array('joins' =>
    array(
        'table' => 'posts',
        'alias' => 'p',
        'type' => 'inner',
        'conditions' => array(
            'User.id = p.user_id'
        )
    )
);

[编辑]

也许你可以添加

'group' => 'User.id'

'fields' => 'DISTINCT User.id, ...'

删除重复条目

答案 1 :(得分:1)

使用计数器缓存,请参阅http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#belongsto

  

counterCache:如果设置为true,则关联的模型将自动进行   增加或减少“[singular_model_name] _count”字段   执行save()或delete()时的外表。如果它是一个字符串   那么它就是要使用的字段名称。计数器字段中的值   表示相关行的数量。您还可以指定多个   计数器缓存使用一个数组,其中键是字段名称和值   是条件。 E.g:

     

阵列(       'recipes_count'=>真正,       'recipes_published'=> array('Recipe.published'=> 1))counterScope:用于更新计数器的可选条件数组   缓存字段。

在这种情况下无需其他查询。如果添加/删除帖子,它将自动进入和减少用户表中的计数。

示例:

public $belongsTo = array(
    'User' => array(
        'foreignKey' => 'user_id',
        'counterCache' => true,
        'counterScope' => array(
            'published' => 1)));