0

我在我的 ArticlesController 中试图显示按文章数量 DESC 排序的热门文章海报列表。该表还需要显示用户拥有的总点数(无顺序)。当我自己计算文章总数或积分总和时,它工作正常,但是当我尝试同时计算这两个数字时,它返回的每个值都不正确。例如,如果用户在文章表中有 5 条记录,在积分表中有 10 条记录(假设总和为 50 分,每个 5 分),那么它将输出用户有 50 篇文章和 250 分。

$this->paginate = array(
    'fields' => array(
        'User.username', 'User.online',
    ),
    'conditions'    => array(
        'Article.page_id'  => $page_id,
        'Article.status_id BETWEEN ? AND ?' => array(2,6),
        'Point.page_id'  => $page_id,
    ),
    'link'  => array(
        'Article' => array(
            'fields' => array(
                'Article.id', 'COUNT(Article.id) AS articles'
            )
       ),
       'Point' => array(
            'fields' => array(
                'Point.id', 'SUM(Point.amount) AS page_points'
             )
        ),
    ),
    'group' => 'User.id',
    'order' => 'articles DESC, User.username ASC',
    'limit' => 35,
    'contain' => array(
        'Avatar' => array(
            'fields' => array(
                'Avatar.file'
             )
        ),
    ) // contain
);

$this->set('users', $this->paginate('User'));
4

1 回答 1

1

那么问题仍然存在于使用可链接行为导致计算出现偏差的多个计算字段。返回的数字乘以每个其他链接模型的行数。

下面实际上完成了我想要的,但更好,因为它适用于分页排序。

$this->User->virtualFields['page_points'] = "(select SUM(amount)
    from points as Point 
    where Point.user_id = User.id
    AND Point.page_id = $page_id
)";

$this->User->virtualFields['page_articles'] = "(select COUNT(Post.id)
    from posts as Post
    where Post.user_id = User.id
    AND Post.page_id = $page_id
    AND Post.status_id BETWEEN 2 AND 6
    AND Post.module_id = $module_id
)";

$this->paginate = array(
    'fields' => array(
        'User.id', 'User.username', 'User.online', 'User.points', 'User.page_points', 'User.page_articles'
    ),
    'link'  => array(
        'Post' => array(
            'fields' => array(
                'Post.id'
            ),
        ),
    ),
    'group' => 'User.id',
    'order' => 'User.page_articles DESC, User.username ASC',
    'limit' => 10,
    'contain' => array(
        'Avatar' => array(
            'fields' => array(
                'Avatar.file'
            ) // avatar fields
        ), // avatar
    ) // contain
); // paginate

$this->set('users', $this->paginate('User'));

显然,如果我仍然不链接到 Post 模型,它就不起作用。所以我链接到 Post 模型并只获得一个 id。查询速度似乎不是问题。我无法计算可链接中的帖子,否则我将无法在分页器排序中使用结果。

于 2013-05-14T19:49:49.987 回答