我正在努力列出与竞争对手(车手)的所有比赛。
比赛保存在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>";
}
?>
我该如何正确地做到这一点?
答案 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。