CakePHP SQL-最大审查的查询计数

CakePHP SQL-query count for maximum review

如何统计评论,以便我可以根据受欢迎程度显示,即谁的评论最高先显示等等。哪个场地的评价最高,它会先显示,然后是其余的。我已经试过了,但它不起作用。

Array
(
    [0] => Array
        (
            [Venue] => Array
                (
                    [id] => 6
                )
            [Review] => Array
                (
                    [0] => Array
                        (
                            [id] => 9
                            [rating] => 4
                            [venue_id] => 6
                        )
                    [1] => Array
                        (
                            [id] => 10
                            [rating] => 3
                            [venue_id] => 6
                        )
                    [2] => Array
                        (
                            [id] => 11
                            [rating] => 3
                            [venue_id] => 6
                        )
                )
        )

    [1] => Array
        (
            [Venue] => Array
                (
                    [id] => 15
                )
            [Review] => Array
                (
                    [0] => Array
                        (
                            [id] => 16
                            [rating] => 5
                            [venue_id] => 15
                        )
                    [1] => Array
                        (
                            [id] => 17
                            [rating] => 4
                            [venue_id] => 15
                        )
                )
        )
    [2] => Array
        (
            [Venue] => Array
                (
                    [id] => 17
                )
            [Review] => Array
                (
                    [0] => Array
                        (
                            [id] => 15
                            [rating] => 4
                            [venue_id] => 17
                        )
                )
        )
    [3] => Array
        (
            [Venue] => Array
                (
                    [id] => 31
                )
            [Review] => Array
                (
                )
        )
    [4] => Array
        (
            [Venue] => Array
                (
                    [id] => 32
                )
            [Review] => Array
                (
                    [0] => Array
                        (
                            [id] => 18
                            [rating] => 1
                            [venue_id] => 32
                        )
                    [1] => Array
                        (
                            [id] => 19
                            [rating] => 1
                            [venue_id] => 32
                        )
                    [2] => Array
                        (
                            [id] => 20
                            [rating] => 1
                            [venue_id] => 32
                        )
                    [3] => Array
                        (
                            [id] => 21
                            [rating] => 1
                            [venue_id] => 32
                        )
                    [4] => Array
                        (
                            [id] => 22
                            [rating] => 1
                            [venue_id] => 32
                        )
                )
        )
)

      if ($order == 'popularity') {
            $order = array('COUNT(Review) DESC');
        }
        $this->Paginator->settings = array('conditions' => $conditions, 'limit' => 10, 'order' => $order, 'page' => @$data['page']);
        $sqql = $this->Paginator->paginate('Venue');

这里我只是通过在给定控制器的模型中编写 2 行代码来做到这一点。我发现这是使用 cakephp 中的 "Virtualfield" 概念的最佳方法。

   var $virtualFields = array(
    'review_count' => 'SELECT COUNT(*) FROM reviews as Review WHERE Review.venue_id = Venue.id'
);

用了Virtualfield概念后,好像简单多了。

这里的结果是这样的

Array
(
    [0] => Array
        (
            [Venue] => Array
                (
                    [id] => 6
                    [review_count]=> 3
                )
         )
[1] => Array
        (
            [Venue] => Array
                (
                    [id] => 15
                    [review_count]=>2
                )
        )
[2] => Array
        (
            [Venue] => Array
                (
                    [id] => 17
                    [review_count]=>1
                )
        )
[3] => Array
        (
            [Venue] => Array
                (
                    [id] => 31
                    [review_count]=>0
                )
        )
[4] => Array
        (
            [Venue] => Array
                (
                    [id] => 32
                    [review_count]=>5
                )
        )

在这里可以很容易地找到某个id的评论数量。 谢谢