Yii:从某个表中获取最重复的id

时间:2015-12-19 15:58:58

标签: php mysql yii

我是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。谢谢。

1 个答案:

答案 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>