2012-02-28 2 views
0

PHP로이 루프를 사용하여 MySQL 데이터베이스에서 내 점수를 모두 선택합니다.내 아이폰 게임의 고득점 시스템

내 쿼리는 다음과 같습니다

$sql = "SELECT * FROM $table WHERE "; 

    switch($type) { 
     case "global": 
      $sql .= "1 "; 
      break; 
     case "device": 
      $sql .= "udid = '$udid' "; 
      break; 
     case "name": 
      $sql .= "name = '$name' "; 
      break; 
    } 

    $sql .= "ORDER BY $sort "; 
    $sql .= "LIMIT $offset,$count "; 

    $result = mysql_query($sql,$conn); 

udid 고유 식별자입니다. 그리고 루프 :

while ($row = mysql_fetch_object($result)) { 
       echo '<tr> 
         <td> 
         '.$rank.' 
         </td> 
               <td> 
         '.$row->name.' 
         </td> 
         <td> 
         '.$row->score.' 
         </td> 
             <td> 
         '.$row->udid.' 
         </td> 

         </tr>'; 
           $rank++; 
      } 

내 질문은 간단하다, 그래서 사람은 그가하는 순위에서 게임 내부를 볼 수 있습니다. "루프 외부의 udid에서 순위를 선택하는 방법".

아마 udid에서 순위를 선택하거나 루프에서 변수를 설정하는 새 쿼리를 만들까요?

답변

1

하나의 옵션은 다른 모든 점수에 따라 사용자의 순위를 계산하고 반환하는 기능을 작성하는 것입니다. 그런 다음 사용자가 자신의 순위를보고 싶어 할 때 호출하십시오.

내가 아는 한 MMORPG 게임은 플레이어의 DB에 rank 필드가 있으며 매일 또는 시간별 cron-job을 사용하여 해당 순위를 업데이트합니다. 대신에 플레이어가 자신의 순위를보고 싶을 때마다 'calculate-the-rank'함수를 실행하는 대신 필드 값을 가져와야합니다.

편집 : 함수에 대한 코드 (귀하의 DB 테이블에 rank 필드를 추가하는 것을 잊지 마세요)

파일 :

cronjob_update_rank.php :

require 'config.php'; //Or whatever contains your config and DB connection. 

$rank = 1; //The best player ranked as 1 
$getMembers = mysql_query("SELECT id FROM members ORDER BY `score` DESC"); 
while($mem = mysql_fetch_array($getMembers)) 
{ 
mysql_query("UPDATE members SET rank='$rank' WHERE id='{$mem['id']}'"); 
$rank++; 
} 

예를 들어, 샘플 코드 일 뿐이므로 필요에 맞게 사용자 정의해야합니다.

서버 패널을 사용하여 해당 파일에 매일 cronjob을 만드십시오. (또는 호스팅 제공 업체에 지원을 요청하십시오).

+0

이 기능을 어떻게 만들 수 있습니까? – coderjoe

+0

내 대답이 업데이트되었습니다. –

1

여기에 플레이어 UDID 1에 대한 순위에 대한 데이터베이스를 조회하는 방법 : 나는 더 높은 점수가 더 있으리라 믿고있어 당신이 각 플레이어의 가장 높은 점수를 저장하고

SELECT COUNT(*) AS rank 
FROM tablename 
WHERE score > (SELECT score FROM tablename WHERE udid = 1) 

.

색인이 scoreudid 인 경우이 속도가 매우 빠릅니다.

쿼리가 수행하는 작업은 선택한 사용자보다 점수가 더 높은 사용자 수를 계산하는 것입니다. 낮은 점수가 더 나은 경우

, 단순히이로 변경 : 낮은 점수 플레이어의 수를 계산

SELECT COUNT(*) AS rank 
FROM tablename 
WHERE score < (SELECT score FROM tablename WHERE udid = 1) 

합니다.

MySQL indexes을 모두 읽으십시오.

+0

실제로 점수가 낮을수록 좋습니다. 내가 어떻게 이것을 바꿔서 작동시킬 수 있을까 ?? 또한 점수에 대한 색인으로 무엇을 의미합니까? – coderjoe

+0

답을 업데이트했습니다. –

+0

그러면 내 테이블은 어떻게 생겼을까요? 순위 및 점수 변수 또는 테이블의 필드입니까? 항상 오류가 발생합니다! – coderjoe

관련 문제