2015-07-21 52 views
0

如何计算查看量以便我可以根据流行度进行显示,即谁拥有最高查看次数以便先显示等。哪个场所的评价最高,它会先显示,然后是其他显示。我已经尝试过,但它不起作用。CakePHP SQL查询计数以获得最大查看量

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

阅读说明书? http://book.cakephp.org/2.0/en/models/retrieving-your-data.html#find-count另外* always *标记您正在使用的特定CakePHP版本。 – burzum

+0

欢迎来到Stack Overflow!我编辑你的问题来修复一些语法并改进格式。我还将代码示例缩进了4个空格,以便它能够正确呈现。我删除了许多备用空行 - 请参阅编辑帮助以获取有关格式化的更多信息。请编辑以提供确定具体问题所需的其他详细信息。祝你好运! – Wtower

回答

0

在这里,我做了简单地写在给定控制器的型号。我发现这个使用CakePHP的“Virtualfield”的概念做到这一点的最好办法2线路编码。

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 nunber。 谢谢