CakePHP SQL查询计数最大限度的审查

时间:2015-07-21 07:11:23

标签: php count cakephp-2.3

我如何计算评论,以便我可以根据受欢迎程度进行展示,即谁具有最高评价以首先显示等等。哪个场所的评价最高,会先显示,然后是休息。我试过了,但它没有用。

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');

1 个答案:

答案 0 :(得分:0)

这里我只是通过在给定控制器的模型中编写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的评论数据。 谢谢