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