2012-11-13 41 views
1

我有一個包含遊戲分數的多列表。格式是每個分數都附有一個遊戲編號。然後我找到每個gameid的最高分並顯示它。問題是,如果一個遊戲被刪除,並且該遊戲ID號不再連續,則它將顯示該遊戲的相同高分的兩個。一個例子是對於gameid 3分5000,對於gameid 4分爲6000,對於gameid 5分爲3200.如果我刪除gameid 4,輸出將是5000-3,5000-3,3200-5.I顯然不是想要它輸出2分相同的分數。下面是我用來做這件事的PHP代碼:PHP MySQL試圖加載數據

<?php 

echo '<table cellpadding="0" class="content" cellspacing="0" width="100%" >'; 
echo '<tr><th>Game</th><th>Initials</th><th>Score</th><th>Date</th></tr>'; 

include("includes/sqlconnect.inc"); 
include("includes/functions.php"); 
$idnum=1; 

    $allscores = mysql_query("SELECT * FROM scores"); 
    $highid = array(
    ); 
    while($row = mysql_fetch_array($allscores)) 
    { 
    $idnums=$row['gameid']; 
    $highid[]=$idnums;  
    } 
while($idnum<=max($highid)) 
{ 
    $allscores = mysql_query("SELECT * FROM scores WHERE gameid ='$idnum'"); 
    $array = array(
    ); 
    while($row = mysql_fetch_array($allscores)) 
    { 
    $score=$row['score']; 
    $scoreid=$row['scoreid']; 
    $array[$scoreid]=$score;  
    } 
    $high=doublemax($array); 
    $nameid = mysql_query("SELECT scoreid,playerid,score FROM scores WHERE scoreid='$high[i]'"); 
    while($row = mysql_fetch_array($nameid)) 
    { 
    $player=$row['playerid']; 
    } 
    $dateid = mysql_query("SELECT scoreid,date FROM scores WHERE scoreid='$high[i]'"); 
    while($row = mysql_fetch_array($dateid)) 
    { 
    if($row['date']=="") 
    { 
      $date="Unknown"; 
    } 
    else 
    { 
      $date=$row['date']; 
    } 
    } 
    $name = mysql_query("SELECT playerid,player_initials FROM players WHERE playerid='$player'"); 
    while($row = mysql_fetch_array($name)) 
    { 
    $initials=$row['player_initials']; 
    } 
    $gamename = mysql_query("SELECT gameid,gamename FROM games WHERE gameid='$idnum'"); 
    while($row = mysql_fetch_array($gamename)) 
    { 
    $game=$row['gamename']; 
    } 

    $idnum++; 

      echo "<tr>"; 
      echo '<td>'.$game.'</td>'; 
      echo '<td>'.$initials.'</td>'; 
      echo '<td>'.number_format($score).'</td>'; 
      echo '<td>'.$date.'</td>';  
    echo "</tr>"; 

    } 

echo "</table>"; 

?> 
+0

數據是:5000 3,6000 4,3200 5.您刪除6000 4.結果現在如何5000 3,5000 3,3200 5? –

+0

這是我確切的問題,我有。 – Casey

回答

0

問題是,你是基於id的輸出數量而不是返回的數據行數。

比得到的最高分後得到你的初始查詢時而是

$allscores = mysql_query("SELECT field1, field2, MAX(score) FROM scores GROUP BY gameid"); // I don't know the field names you need obviously place those instead of field1 etc. 

然後立足於一個foreach,而不是當你的主循環。

1

你這樣做太難了。您的查詢應該是這樣的:

SELECT 
    game_id, 
    MAX(score) 
FROM 
    scores 

,然後如果你想顯示有關該遊戲的詳細信息,而不是要重複,做這樣的左右:

SELECT 
    h.game_id, 
    h.score, 
    (
     SELECT 
      /*for example*/ date_played 
     FROM 
      scores 
     WHERE 
      game_id = h.game_id AND 
      score = h.score 
     LIMIT 1 
    ) date_played 
FROM 
(
    SELECT 
     game_id, 
     MAX(score) score 
    FROM 
     scores 
) hiscores h 

簡而言之:MySQL是工具來以你想要的形式獲取數據。不要過度使用php,這是完全沒有必要的。