2012-12-03 2 views
0

업그레이드 스크립트를 만들려고하지만 while 루프가 끝나지 않아 오류가있는 것 같습니다.php/mysql 업그레이드 스크립트에서 오류가 발생했습니다.

내가하려는 것은 업그레이드 코드의 결과로 데이터베이스 필드를 설정하는 것입니다. 그러므로 나는 while 회 돌이가 2 개있다. 첫 번째 루프는 모든 user_id, 두 번째 while 루프는 각 사용자가 채운 모든 프로필 필드의 비율을 계산합니다. 첫 번째 while 루프는 정확한 user_id를 제공하므로 정상적으로 작동합니다. 아니면 일부 user_id가 더 이상 존재하지 않는 것이 문제 일 수 있습니까?

$count_userid = 1; 

     while($count_userid < 10000) 
     { 

    // profile percentage 

       $resultpercentage = mysql_query("SELECT profilevalue_1, profilevalue_2, profilevalue_3 FROM table_profilevalues WHERE profilevalue_user_id = '$count_userid' LIMIT 1"); 

      while ($row = mysql_fetch_row($resultpercentage)) { 
       $empty_count = 0; 
       $count = count($row); 
       for ($i = 0; $i < $count; $i++) 
       if ($row[$i] === '' || $row[$i] === '-1' || $row[$i] === 'NULL') 
        $empty_count++; 
       $profile_percent_user = ((int) (100 * (1 - $empty_count/($count - 1)))); 


       // SAVE PROFILE PERCENTAGE 
       $profile_percentage_query = "UPDATE table_users SET user_profilepercentage='$profile_percent_user' WHERE user_id='$count_userid' LIMIT 1"; 
       $database->database_query($profile_percentage_query); 
      } 

      $count_userid++; 
     } 

누구나 문제를 여기 참조 :

코드에서 참조하시기 바랍니다? 한 가지 들어

안부

+1

코드를 숨기고 있지만, 왜 하나의 UPDATE 문으로 SQL에서이 모든 작업을 수행 할 수 없었습니까? 또한 디버깅을 위해 코드에 echo 문을 추가하여 진행 상황과 중단되는 부분을 확인할 수 있습니다. 오랜 시간이 걸리지 않고 루프가 끝나지 않았다고 확신합니까? – Brad

+0

안녕하세요 Brad, 단일 SQL UPDATE 문을 사용하면 어떻게됩니까? SQL에 루프 기능이 있습니까? 그리고 예, while 루프가 끝나지 않는 것처럼 보였습니다. <5로 시도했지만 웹 사이트를 사용할 수없고 서버 부하가 높습니다. –

+0

어떤 종류의 루프가 필요하다고 생각하지 않습니다. 그렇습니까? 당신이하려고하는 것을 묘사 할 수 있습니까? 나는 당신의 코드를 읽고 있는데, 당신이 성취하고자하는 것이 무엇인지 분명하지 않습니다. 'UPDATE table_users SET user_profilepercentage = AVG (profilevalue_1, profilevalue_2, profilevalue_3)'또는 이와 유사한 것을 할 수있는 것처럼 보입니다. – Brad

답변

0

을 $의 resultpercentage 때문에, 올바른 SQL 쿼리에 "LIMIT 1"의 1 개 값을 포함 할 것인가? 그렇다면 다음과 같은 반복 루핑이 있습니까? 그리고 다음 카운트는 오직 1이 될 것이고 그 다음에 나오는 for 루프는 무효화됩니다.

tl; dr : 모든 결과를 반복 할 수 있도록 "LIMIT 1"을 제거하십시오.

관련 문제