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

标签 php mysql html-table

我正在尝试与竞争对手(骑手)列出所有比赛的 list 。 比赛保存在 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>";
        }   
?>

我怎样才能正确地做到这一点?

最佳答案

如果不知道您的数据库架构,很难确定,但根据您的代码,您最好对每个“游戏”行执行 SQL 联接,而不是单独的数据库 SELECT 查询。

每个数据库查询的计算成本都很高。如果您的 tbl_GAME 查询返回 1000 行,并且您的 tblRider 查询平均返回 1000 行,则您将执行 1001 个单独的查询(总共返回 1,000,000 条数据库行)。将其合并到单个 SQL 连接中可以将其缩减为一个完整的 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 发生更改,则呈现新的分组 header 。

我也会回应 Aaron Miller 的评论,并强烈建议您查看使用 PHP PDO并使用prepared statements并绑定(bind)你的变量/参数。

Here is a article开始使用 PDO。

关于php - 如何使用嵌套循环创建列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16739037/

相关文章:

php - PHP 中的 json_encode 没有返回正确的结果

php - 自动保存服务器架构

javascript - 自动完成远程源多个输入

mysql - 检查时间是否在多个时间之间(时间数据类型)

mysql - 连接 2 个 MySQL 临时表比连接临时表和普通表并添加 WHERE 子句慢 50 倍?

php - 如何使用 PHP 从 MYSQL 检索值到单选按钮?

PHP PDO 尝试在登录时更改导航栏

javascript - 没有 jQuery 的带有自定义滚动条的 HTML 表格

html - 如何使表格在所有浏览器中保持一致

html - 外框为黑色但内框为灰色的表格