2015-12-22 64 views
0

我一個yiibie,我有我有一個表命名user_join_event具有id(PK)ngo_id(FK)event_id(FK)date_createddate_modified爲對象的問題,我想每個月都得到5個用戶ID(在這個表中最重複的)。就像今年1月的前5名用戶,2月前5名用戶等等,然後是今年年底的前5名用戶一樣,每年完成一次後,它應該再次提供來自全月的前5名用戶。請幫助我,如何爲此編寫SQL查詢,謝謝。的Yii:用於獲取頂級用戶每個月和頂級用戶在今年年底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> 
+0

您認爲哪個日期用於和mnoth和year過濾器? dat_created ?, date_modified? – scaisEdge

+0

月和年結束的第30個日期。 –

+0

NO。我需要知道該字段的名稱.. date_created或date_modified? – scaisEdge

回答

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> 
+0

謝謝你的答案,但我要在哪裏使用循環,在我的視圖文件或這裏的查詢或只是我必須粘貼此代碼並測試它.. ?? 其實我不知道如何在我的解決方案中使用它, –

+0

年你應該使用代碼來回答你在以前的答案中使用的模擬查詢中的sobstitution。對於一個月,你應該在你的視圖中執行循環..就像你想要重複查詢十二次..如果我remenber很好,你應該已經有這種查詢的視圖。複製並嘗試適應你的需要.. – scaisEdge

+0

好吧,還有最後一個問題,你已經指定了2015年的這個查詢,如果2016年來了,這個查詢將工作.. !! –