1

我正在尝试获得给定用户的总票数。

说这是帖子表

id | body  | user_id | vote_total | type
1    test     1          4          new
2    test2    1          3          new
3    test3    2          2          new

我正在尝试获得以下输出

user_id  | vote_total
 1          7
 2          2

这是我在 PostsController 中的功能

 public function topvotes(){ 
    $virtualFields = array('total' => 'SUM(Post.vote_total)');
    $total = $this->Post->find('all', array(
                            array('fields' => array('total'), 
                            'recursive' => 1,
                            'group' => array('Post.user_id'),
                            'conditions'=>array('Post.type' => 'new' ))));

    $post = $this->Post->find('all', $total);
    $this->set('posts', $post);
}

此查询有效(我尝试使用 phpmyadmin),但我不知道如何访问结果数组

编辑我使用以下查询让它工作

$query = $this->Post->query("select posts.user_id, SUM(Posts.vote_total) from posts where posts.type = 'new' group by posts.user_id");
    $this->set('posts', $query);

当我输入 print_r 这是数组

Array ( [posts] => Array ( [user_id] => 7 ) [0] => Array ( [total] => 6 ) ) 1
4

2 回答 2

4

我认为你的阵列搞砸了。另外,您在哪里设置模型的虚拟字段?最后但并非最不重要的一点:为什么要在查询中进行查询?

public function topvotes() { 
    $this->Post->virtualFields = array('total' => 'SUM(Post.vote_total)');
    $posts = $this->Post->find('all', array(
                            'fields' => array('total'),
                            'recursive' => 1,
                            'group' => array('Post.user_id'),
                            'conditions'=>array('Post.type' => 'new')
    ));
    $this->set('posts', $posts);
}
于 2012-08-08T00:30:13.780 回答
-1

您可以通过以下方式执行相同操作:

$this->Post->virtualFields['TotalVotes'] = 0;
$query = $this->Post->query("select posts.user_id, SUM(Posts.vote_total) as TotalVotes from posts where posts.type = 'new' group by posts.user_id");
$this->set('posts', $query);

此文档页面肯定会帮助您实现所需的相同目标。请询问它是否不适合您。

于 2012-08-08T03:44:14.100 回答