我是yiibie,我正在尝试在名为user_join_event
的表上运行查询,通过该表我可以获得在此表中重复最多的5 user_id
,以便我可以拥有5个最活跃的用户ID。查询是
SELECT `user_id`
FROM `user_join_event`
GROUP BY `user_id`
ORDER BY COUNT(*) DESC
LIMIT 5;
这个查询给了我完美的结果,我已经转换了这个查询,以便我可以在yii中使用它:
$sql = Yii::app()
->db
->createCommand()
->select('user_id')
->from('user_join_event')
->group('user_id')
->order('COUNT(*) DESC')
->limit(4)
->queryAll()
之后我在UserJoinEvent
控制器中创建了一个allstats函数:
public function actionAllstats()
{
$rbmodel = UserJoinEvent::model()->findAll();
$this->layout = 'main';
$sql = Yii::app()
->db
->createCommand()
->select('user_id')
->from('user_join_event')
->group('user_id')
->order('COUNT(*) DESC')
->limit(4)
->queryAll();
$this->render('allstats', array("sql" => $sql, "rbmodel" => $rbmodel));
}
和allstat.php
(在UserJoinEvent的视图文件中):
<div>
<?php foreach ($rbmodel as $show): ?>
<h3><?php echo $show->user_id?></h3>
<?php endforeach; ?>
</div>
这样我就可以在此视图页面上拥有前5名成员ID。但是现在,根据这段代码,它给了我user_id
表中的所有UserJoinEvent
而不是表中最重复的5个id。请帮助我获取最重复用户的5个ID。谢谢。
答案 0 :(得分:1)
我认为你应该只通过查询得到模型并使用它们(在你的视图中,你回应完全访问UserJoinTAble的结果) 尝试以这种方式修改你的代码
public function actionAllstats()
{
$this->layout='main';
$user=UserJoinEvent::model()->findAll(array(
'select'=>'user_id',
'group'=>'user_id',
'order'=>'COUNT(*) DESC',
'limit' => 4
));
$this->render('allstats', array("user"=>$user));
}
And a allstat.php(in the view file of UserJoinEvent) which is
<div>
<?php
foreach($user as $show)
{
echo '<h3>' . $show->user_id . '</h3>';
}
?>
</div>