如何使用嵌套循环创建列表

时间:2013-05-24 15:56:01

标签: php mysql html-table

我正在努力列出与竞争对手(车手)的所有比赛。 比赛保存在tbl_GAMEtblRider中的所有参赛者。

我尝试了下面的代码,但它没有用。问题是我在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>";
        }   
?>

我该如何正确地做到这一点?

1 个答案:

答案 0 :(得分:1)

在不知道您的数据库架构的情况下,很难确定,但根据您的代码,您最好不要为每个“游戏”行执行SQL连接而不是单独的数据库SELECT查询。

每个数据库查询的计算成本都很高。如果tbl_GAME查询返回1000行,并且您的tblRider查询平均返回1000行,则将执行1001个单独的查询(返回1,000,000个总数据库行)。将其合并为单个SQL Join可以将其缩减为一个完整的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并使用prepared statements并绑定您的变量/参数。

Here is a article开始使用PDO。