2014-09-08 3 views
0

CakePHP를 사용하여 응용 프로그램을 만들고 있습니다. 나는 saveAll 기능을 사용하는 행동을했다.CakePHP의 "saveAll"은 저장하는데 3 분이 필요합니까?

많은 데이터가 필요 없기 때문에 잘 작동한다고 생각했지만 saveAll 또는 다른 저장 기능을 사용하여 저장하는 데 3 분 이상이 걸렸습니다.

누구든지 내 실수를 찾았습니까?

에 phpMyAdmin의 열 : 아이디, 순위, school_detail_id, total_score, school_name, (약 300 ~ 400 데이터가)

public function rank_update(){ 
     $check_scores = $this->ClubScore->find('all', array('fields'=>array('id','total_score'))); 
     $check_scores2 = Set::sort($check_scores, "{n}.ClubScore.total_score","DESC"); 

     $rank_id=0; 
     $temp_score=0; 
     $temp = null; 
     $for_count=0; 
     foreach ($check_scores2 as $check_score): 
      if($temp_score != $check_score['ClubScore']['total_score']){ 
       $rank_id++; 
       $temp_score = $check_score['ClubScore']['total_score']; 
       // make ranking by score. same score is same ranking. 
      } 
      $this->ClubScore->id = $check_score['ClubScore']['id']; 
      $this->ClubScore->saveField('rank', $rank_id); 
     endforeach; 
} 
+2

그래서 ... 어디서나 코드를 참조 할 수 없습니다 ... – Nunser

+1

이 작업에는 데이터베이스를 활용해야합니다. [this] (http://stackoverflow.com/questions/2727138/update-the-rank-in-a-mysql-table)와 같은 많은 게시물이 데이터베이스 중심 솔루션과 함께 제공됩니다. – AgRizzo

답변

0

나누기 단순한 접근 방식의 foreach에서 쿼리

GET 내림차순으로 분명한 total_score

$data = $this->ClubScore->find('all', array('fields'=>array('DISTINCT total_score'), 'order' => 'total_score DESC')); 

그리고 나서 sim pYY updateAll 및 foreach를 사용하여 각 total_score의 순위로 키를 저장하십시오.

0

Abhishek 및 AgRizzo, Nunser 대단히 감사합니다 !! 이제이 문제를 완전히 해결했습니다. 단 1 ~ 2 초가 걸린다 !!!!!

다음은 소스 코드입니다.

공공 기능 rank_update() {

  $data = $this->ClubScore->find('all', array('fields'=>array('DISTINCT total_score'),  'order' => 'total_score DESC')); 

      $check_scores = $this->ClubScore->find('all', array('fields'=>array('id','total_score'))); 

      $check_scores2 = Set::sort($check_scores, "{n}.ClubScore.total_score","DESC"); 

       $ii = 0; 
       $temp = 0; 
      foreach($check_scores2 as $scores): 
       if($data[$ii]['ClubScore']['total_score'] 
           == $scores['ClubScore']['total_score']){ 
       $temp=$ii+1; 

       }else{ 
       $ii++; 
       $temp=$ii+1; 
       } 

       $update_arr[] = array(
        'ClubScore' => array(
        'id' => $scores['ClubScore']['id'], 
        'rank' =>$temp, 
         ) 
        ); 

      endforeach; 

      $update_arr = Set::sort($update_arr, "{n}.ClubScore.id","ASC"); 

      var_dump($update_arr); 

      foreach($update_arr as $update_arrs): 
      $this->ClubScore->updateAll(
       array(
        'ClubScore.rank' => $update_arrs['ClubScore']['rank'], 
       ), 
       array(
        'ClubScore.id' => $update_arrs['ClubScore']['id'], 
        ) 
       ); 
      endforeach; 


} 

대단히 감사합니다. 감사합니다.