0

競合他社(ライダー)とのすべての競技のリストを作成しようとしています。競技は に保存されtbl_GAME、すべての競技者は に保存されtblRiderます。

以下のコードを試しましたが、うまくいきませんでした。whileループにループを入れるのは問題whileですか?

<?php
include_once('class/Competition.class.php');

$c = new Competition();
$comp = $c->getAllCompetitions();

 while ($game = $comp->fetch_assoc()) {

        echo "
        <table id='showAll'>
            <tr>
                <td>Rider
                    <table>
                        <tr><td>rank</td><td>naam</td></tr>
                        "; 
    $sql="SELECT * FROM `tblRider` WHERE `ContestId` ='".$game['ContestID']."' AND '".$game['type']."'=1 AND `GroupID`='".$game['GroupID']."'";
    $query=mysql_query($sql);
    while($rider =mysql_fetch_array($query)){
        echo "<tr><td>1</td><td>".$rider['RiderFirstname']." ".$rider['RiderLastname']."</td></tr>";
    } 
    echo "
                    </table>
                </td>
                <td>Run1
                    <table>
                        <tr><td>Judge1</td><td>Judge2</td><td>Judge3</td><td>Judge4</td><td>Judge5</td><td>Judge6</td><td>Totaal</td></tr>
                        <tr><td>45</td><td>67</td><td>80</td><td>96</td><td>44</td><td>33</td><td>234</td></tr>
                    </table>
                </td>
                <td>Run2
                    <table>
                        <tr><td>Judge1</td><td>Judge2</td><td>Judge3</td><td>Judge4</td><td>Judge5</td><td>Judge6</td><td>Totaal</td></tr>
                        <tr><td>45</td><td>67</td><td>80</td><td>96</td><td>44</td><td>33</td><td>234</td></tr>
                    </table>
                </td>
                <td>Overall
                    <table>
                        <tr><td>leeg</td></tr>
                        <tr><td>30</td></tr>
                    </table>
                </td>
            </tr>
        </table>";
        }   
?>

どうすればこれを正しく行うことができますか?

4

1 に答える 1

1

データベース スキーマを知らなければ、確かなことは言えませんが、コードに基づいて、「ゲーム」行ごとに個別のデータベース SELECT クエリを実行するよりも、SQL 結合を実行した方がよいようです。

各データベース クエリは計算コストが高くなります。tbl_GAME クエリが 1000 行を返し、tblRider クエリが平均で 1000 行を返す場合、1001 の個別のクエリを実行します (合計 1,000,000 データベース行を返します)。これを 1 つの SQL Join に統合すると、全体で 1 つの SQL クエリになる可能性があり、これはより高速になります (おそらくはるかに高速になります)。

SQL 結合は次のようになります。

SELECT * FROM tblRider, tbl_Game 
WHERE tblRider.ContestId = tbl_Game.ContestID  
  AND tbl_Game.type=1 
  AND tblRider.GroupID = tbl_Game.GroupID

ゲームに基づいてグループ化しようとしているためにクエリをネストしている場合は、ORDER BY 句を使用して、各ライダーが基本的にゲームごとにグループ化されていることを確認し、各ライダー レコードを取得して、前のライダー レコードと比較することができます。 . GroupID または ContestID が変更された場合は、新しいグループ化ヘッダーをレンダリングします。

また、Aaron Miller のコメントをエコーし​​、PHP PDOの使用を検討し、準備済みステートメントを使用して、変数/パラメーターをバインドすることを強くお勧めします。

これは、 PDO を使い始めるための記事です。

于 2013-05-24T18:51:56.357 に答える