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

在不知道您的数据库模式的情况下很难确定,但根据您的代码,您似乎最好执行 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并使用准备好的语句并绑定您的变量/参数。

这是一篇关于 PDO 入门的文章。

于 2013-05-24T18:51:56.357 回答