2012-02-28 10 views
0

私はこのテーブルをPHPで私のゲームからすべての私のスコアを選択するためにこのループを持っています。私のiPhoneゲームの高得点システム

私のクエリは次のとおりです。

$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

1つのオプションは、他のすべてのスコアに基づいてユーザーのランクを計算して戻す関数を作成することです。 次に、ユーザーが自分のランクを見たいときに呼び出します。

私が知る限り、MMORPGゲームは、 プレーヤーごとにDBにrankフィールドを持ち、毎日または毎時のcronジョブを使用してそのランクを更新します。 それでは、「calculate-the-rank」関数を毎回実行するのではなく、プレイヤーが自分のランクを見たいと思うたびに、フィールドの値を取得するだけです。

EDIT:関数のコード(あなたの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++; 
} 

これは単なるサンプルコードなので、必要に応じてカスタマイズする必要があります。

サーバーパネルを使用して、そのファイルに毎日のcronジョブを作成します。 (またはホスティングプロバイダのサポートを依頼してください)。

+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

関連する問題