Yii:SQL查询用于获取每个月的顶级用户以及年末的顶级用户

时间:2015-12-22 17:45:06

标签: mysql yii

我是yiibie,我有一个问题,我有一个名为user_join_event的表,其中有id(PK) ngo_id(FK) event_id(FK) date_created date_modified作为对象,以及我想每个月获得5个用户ID(在此表中重复次数最多)。就像1月排名前5位的用户,2月排名前5位的用户等等,然后是今年年底排名前5位的用户,就像一年中完成一样,它应该再次给出全月前5位用户。请帮帮我,如何为此编写SQL查询,谢谢。

 public function actionAllstats()
            {

        $this->layout='main';
        $user=UserJoinEvent::model()->findAll(array(
            'condition' => 'YEAR(date_created)=:year and MONTH(date_created)=:month',
            'param' => array(':year'=>2015, ':month'=>$yourMonth),
            'select'=>'user_id',
            'group'=>'user_id',
            'order'=>'COUNT(*) DESC',
            'limit' =>  5
         ));  
        $this->render('allstats', array("user"=>$user));
            }

这是我的查看文件

<div>
    <?php

        foreach($user as $show)
        {
            for($i = 1 ; $i <=12 ; $i++)
            {
                if($yourMonth == $i)
                {
                    $model = User::model()->findByAttributes(array('id'=>$show->user_id,));
           if (isset($model)) 
               {
               echo '<h3>' . $show->user_id .  ' - ' . $model->username . '</h3>';
           } 
           else {
               echo '<h3>' . $show->user_id .  ' - Username not found</h3>';
           } 
                }
            }

        }

        ?>
    </div>

1 个答案:

答案 0 :(得分:1)

对于本年度,您可以起诉此查询以获取用户

       $user=UserJoinEvent::model()->findAll(array(
            'condition' => 'YEAR(date_create)=:year',
            'params' => array(':year'=>2015)
            'select'=>'user_id',
            'group'=>'user_id',
            'order'=>'COUNT(*) DESC',
            'limit' =>  5
         ));  

并且对于月份,您可以使用此查询从1到12进行循环,并使用循环中的值设置$ yourMonth

       $user=UserJoinEvent::model()->findAll(array(
            'condition' => 'YEAR(date_create)=:year and MONTH(date_create)=:month',
            'params' => array(':year'=>2015, ':month'=>$yourMonth )
            'select'=>'user_id',
            'group'=>'user_id',
            'order'=>'COUNT(*) DESC',
            'limit' =>  5
         ));  

控制器操作

public function actionAllstats()
{

    $this->layout='main';
    $myCurrYear = date("Y")
    $userYear=UserJoinEvent::model()->findAll(array(
        'condition' => 'YEAR(date_create)=:year',
        'params' => array(':year'=>$myCurrYear)
        'select'=>'user_id',
        'group'=>'user_id',
        'order'=>'COUNT(*) DESC',
        'limit' =>  5
     ));  
    $this->render('allstats', array("userYear"=>$userYear));
}

查看

这个视图不是基于良好的实践,因为在视图中使用访问模型。是一个试验,让您了解与问题相关的一些问题。

<?php    // this for the twelve month

    for($month = 1 ; $month <=12 ; $month++) {
    <div>
        $user=UserJoinEvent::model()->findAll(array(
            'condition' => 'YEAR(date_created)=:year and MONTH(date_created)=:month',
            'params' => array(':year'=>2015, ':month'=>$month),
            'select'=>'user_id',
            'group'=>'user_id',
            'order'=>'COUNT(*) DESC',
            'limit' =>  5
         ));    
        foreach($user as $show) {
            $model = User::model()->findByAttributes(array('id'=>$show->user_id,));
            if (isset($model)) {
                echo '<h3>' . $show->user_id .  ' - ' . $model->username . '</h3>';
            } 
             else {
                echo '<h3>' . $show->user_id .  ' - Username not found</h3>';
            } 
        }
    </div>            
    }
?>


<div>   
    <?php // the for the year 
        foreach($userYear as $show) {
            $model = User::model()->findByAttributes(array('id'=>$show->user_id,));
            if (isset($model)) {
                echo '<h3>' . $show->user_id .  ' - ' . $model->username . '</h3>';
            } 
             else {
                echo '<h3>' . $show->user_id .  ' - Username not found</h3>';
            } 
        }
    ?>
</div>