2

ゲームサーバーデータベースからいくつかの統計を取得し、それらをテーブルに返そうとしています。

私は最初のビットをなんとかやり遂げました-10の結果を引き出し、htmlのテーブルに表示します、しかし...次のビットは私を困惑させます...私は各プレーヤーのために別のテーブルからいくつかの情報を取得したいです...

これが私がこれまでに持っているものです...厄介なコードを許してください、私はちょうど学んでいます!

// adding ALL info from the first 10 tables 'profile' based on humanity, ascending, to     the variable 'profile_info'

$profile_info = mysql_query("SELECT * FROM profile ORDER BY humanity desc LIMIT 10");

while($row = mysql_fetch_array($profile_info))
  {
// Below I add the players unique ID into the variable $unique, to be used later for         pulling their survival time from the 2nd table, which is called 'survivor' 

  $unique = $row['unique_id'];
  echo "<tr>";
  echo "<td class=\"c1\">" . $row['name'] . "</td>";
  echo "<td class=\"c2\">" . $row['humanity'] . "</td>";
  echo "<td class=\"c3\">" . $row['total_survivor_kills'] . "</td>";
  echo "<td class=\"c4\">" . $row['total_bandit_kills'] . "</td>";
  echo "<td class=\"c5\">" . $row['total_zombie_kills'] . "</td>";
  echo "<td class=\"c6\">" . $unique . "</td>";

//In the line below, I try to get data from the 2nd table (called survivor), checking   for the unique_id for the player (extracted from the first table, called 'profile') which is common across both tables and which have a 0 in the field 'is_dead'

 $result = mysql_query("SELECT * FROM `survivor` WHERE `unique_id` ='.$unique' AND     `is_dead` = 0") or die(mysql_error());

 echo $unique;

  if (mysql_num_rows($result)) {
    $survivors_survival_time = mysql_fetch_assoc($result);
      echo "<td class=\"c7\">" . $survivors_survival_time['survival_time'] . "</td>";

}

上記のコードはおそらくごみですが、私が何をしようとしているのかがわかるといいのですが。

ほとんどは正常に機能します。最初のテーブルの行のunique_idに基づいて、2番目のテーブルからプレーヤーの情報を取得しようとする部分は機能しません:(

何かアイデアがありますか、それとも上記は私が諦めるべきであるほど悪いですか?

4

4 に答える 4

2

ここで個々のプレーヤーの情報を取得するクエリにタイプミスがあると思います。

mysql_query("SELECT * FROM `survivor` WHERE `unique_id` ='.$unique' AND     `is_dead` = 0")

具体的には、値フィールドにunique_id = '.$unique'エクストラがある部分です。.

以下を取得するには、それを削除してみてください。

$result = mysql_query("SELECT * FROM `survivor` WHERE `unique_id`='$unique' AND `is_dead` = 0") or die(mysql_error());

.もちろん、これは、テーブル内の各unique_id値の前に a を追加しないという前提の下にありsurvivorます。

サイドノート(特定の回答ではありません):非推奨の関数ではなくMySQLiまたはPDOライブラリ
を使用するようにコードを更新する場合、準備されたステートメントを使用できます。これらを使用すると、上記のような軽微なエラーが防止されるだけでなく、より安全なコードも提供されます。mysql_

于 2012-12-28T13:35:32.600 に答える
0

ループをネストするwhileか、mysql LEFT JOINについて読んで、クエリを更新してください。

于 2012-12-28T13:32:26.570 に答える
0

結合を使用してこれらのクエリを組み合わせることができます。

SELECT 
    * 
FROM 
    profile AS p
LEFT JOIN 
    survivor AS s ON p.unique_id = s.unique_id 
WHERE 
    s.is_dead = 0
ORDER BY 
    humanity DESC 
LIMIT 
    10

次に、単に結果をループします。LEFT JOIN を使用すると、 のすべての結果profileと の一致が得られますsurvivor。これを JOIN に変更すると (つまり、LEFT を削除すると)、profileANDに一致する行のみが表示されsurvivorます。

いくつかの提案:

  1. SELECT * の代わりに、「名前、人類、生存時間などを選択」など、必要な列を明示的に指定します。
  2. PDO などの準備済みステートメントを使用できるクエリ メソッドを使用します。
  3. HTML 出力ですべての double をエスケープする必要がないように、double の代わりに一重引用符を使用します。あなたのコードを読んだ人は誰でも感謝します!
于 2012-12-28T14:43:16.027 に答える
0

私は常に MSSQL を使用しているため、MySQL についてはわかりませんが、PHP と mssql で記述する方法は次のとおりです。

'SELECT * FROM survivor WHERE unique_id="'.$unique.'" AND is_dead = 0'

それを試して、私に知らせてください;)

于 2012-12-28T14:35:00.127 に答える