1

MySQL からの結果のリストをループして、すべての一意のゲーム名とそれぞれのカウントを HTML テーブル形式で表示しようとしています。名前や数が表示されない最後の行までは正常に機能します。姓に複数の行がある場合、名前は表示されますが、数は表示されません。

私のコード:

$propertyGameQuery = "SELECT G.GAME_NAME FROM GAMES AS G, PROPERTY_GAMES AS PG WHERE PG.PROPERTY_ID=$cid AND G.ID=PG.GAME_ID ORDER BY G.GAME_NAME";
$propertyGameResult = mysql_query($propertyGameQuery);

$gameCount = 0;
$rowCounter = 0;
$number = mysql_num_rows($propertyGameResult);
$rws = mysql_fetch_assoc($propertyGameResult);
$starterName = $rws['GAME_NAME'];

while($propertyGames = mysql_fetch_assoc($propertyGameResult)) {
    $currentGameName = $propertyGames['GAME_NAME'];
    if(($gameCount == 0) or ($rowCounter == $number)){
    ?>
        <tr class="game-table"><td width="80%" title="<? echo $currentGameName; ?>" align="left" style="padding-left:5px;"><? echo $rowCounter ?> <? echo $currentGameName; ?></td>            
    <? 
    }
    if(($currentGameName == $starterName) or ($lastGameName == $currentGameName)){ 
        $gameCount = $gameCount + 1;    
    }else{
    ?>
        <td width="20%" align="center"><? echo $gameCount + 1; ?></td></tr>                             
    <? 
        $gameCount = 0;  
    } ?>
    <?
    $lastGameName = $currentGameName;
    $rowCounter++;
} 
4

3 に答える 3

1

最後の行を表示するには、次のように変更する必要があります。

if(($gameCount == 0) or ($rowCounter == $number)){ 

if(($gameCount == 0) or ($rowCounter-1 == $number)){ 

これは、カウントを 0 から開始し、この呼び出しの後まで行カウントを入れないためです。

以下も変更する必要があります。

if(($currentGameName == $starterName) or ($lastGameName == $currentGameName)){  

if((($currentGameName == $starterName) or ($lastGameName == $currentGameName)) && ($rowCounter-1 != $number)){  

これがコードを修正する方法ですが、クエリを最適化することでこれを行うことができます。

于 2012-06-22T20:35:04.433 に答える
1

これはすべてクエリで実行できます

SELECT G.GAME_NAME, COUNT(*) as nb_games 
FROM GAMES G, PROPERTY_GAMES PG 
WHERE PG.PROPERTY_ID = $cid 
AND G.ID=PG.GAME_ID 
GROUP BY G.GAME_NAME
ORDER BY G.GAME_NAME

それで:

$sql = "SELECT G.GAME_NAME, COUNT(*) as nb_games"
    . " FROM GAMES G, PROPERTY_GAMES PG" 
    . " WHERE PG.PROPERTY_ID = $cid" 
    . " AND G.ID=PG.GAME_ID" 
    . " GROUP BY G.GAME_NAME"
    . " ORDER BY G.GAME_NAME";

$propertyGameResult = mysql_query($propertyGameQuery);
$counter = 0;
while(false !== ($rws = mysql_fetch_assoc($propertyGameResult)): $counter++; ?>
<tr class="game-table">
  <td width="80%" title="<?php echo $rws['GAME_NAME']; ?>" align="left" style="padding-left:5px;">  
    <?php echo $counter ?> <?php echo $rws['GAME_NAME']; ?>
  </td>
  <td width="20%" align="center">
    <?php echo $rws['nb_games']; ?>
  </td>
</tr>
<?php endwhile; ?>
于 2012-06-22T20:30:48.260 に答える
0

この関数は while ループの外側で 1 回呼び出します。すべての行が確実に出力されるようにするには、while ループの内側でのみ呼び出す必要があります。

mysql_fetch_assoc( $propertyGameResult);
于 2012-06-22T20:30:39.800 に答える