我有下表,表示赢/输记录和排名。我虽然遇到了两个问题。
<td>
没有像我想要的那样进展。我的意思是对于每个循环和输出的记录,我希望它被编号为。即:
1
2
3,等等。
有人会指出我遇到的这些问题正确的方向吗?
<h2>Division 1</h2>
<table>
<tr>
<th>Rank</th>
<th>Name</th>
<th>Wins</th>
<th>Losses</th>
</tr>
<?php
try {
//Prepare
if ($stmt = $con->prepare("SELECT * FROM team_rankings WHERE `division`=1")) {
$stmt->execute();
$stmt->bind_result($ranking_id, $ranking_user_id, $ranking_firstname, $ranking_username, $ranking_division, $ranking_wins, $ranking_losses);
//var_dump($stmt);
if (!$stmt) {
throw new Exception($con->error);
}
$stmt->store_result();
while ($row = $stmt->fetch()) {
?>
<tr>
<td>1</td>
<td><?php echo $ranking_firstname; ?></td>
<td><?php echo $ranking_wins; ?></td>
<td><?php echo $ranking_losses; ?></td>
</table>
<?php
}
} else {
echo "<p>There aren't any players in division 1 yet.</p>";
}
}
catch (Exception $e)
{
echo "Error: " . $e->getMessage();
}
?>
答案 0 :(得分:3)
您需要像这样使用ORDER BY
这样做:
SELECT * FROM team_rankings WHERE `division`=1" ORDER BY Wins DESC, Losses
更多:link
对于您的第一个问题,</table>
需要超出您的php while
循环。还有一个计数器,您可以递增并显示订单。
$count = 0;
while ($row = $stmt->fetch()) {
?>
<tr>
<td><php echo $count; $count++; ?></td>
<td><?php echo $ranking_firstname; ?></td>
<td><?php echo $ranking_wins; ?></td>
<td><?php echo $ranking_losses; ?></td>
</tr>
<?php } ?>
</table>
更好的东西?使用foreach
答案 1 :(得分:1)
编号问题可以解决:
$i = 1;
while ($row = $stmt->fetch()) {
?>
<tr>
<td><?php echo $i ?></td>
<td><?php echo $ranking_firstname; ?></td>
<td><?php echo $ranking_wins; ?></td>
<td><?php echo $ranking_losses; ?></td>
</tr>
<?php
$i++;
}
这会将变量$i
设置为'1'(在循环外部),将变量作为<td>
中的数字回显,并在循环关闭之前递增变量$i++
哦,是的,不要在循环内关闭你的<table>
。 :)
答案 2 :(得分:0)
您希望在查询中使用ORDER BY
clause。它可以直接按列排序或通过某种计算排序。例如,你可以这样做:
SELECT *
FROM team_rankings
WHERE division = 1
ORDER BY
(wins - losses) DESC,
wins DESC
这样1-0的排名将高于6-6但低于2-1。这是多么合适取决于你自己决定。