我正在尝试与竞争对手(骑手)列出所有比赛的 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/