按数据库中的选定列排序

时间:2015-07-28 15:08:54

标签: php mysql while-loop html-table

我有下表,表示赢/输记录和排名。我虽然遇到了两个问题。

  • 第一个问题是我的排名<td>没有像我想要的那样进展。我的意思是对于每个循环和输出的记录,我希望它被编号为。

即:

1

2

3,等等。

  • 我无法弄清楚的第二部分是我希望总胜率最高的人排名最高。我也希望将损失配置到其中。因此,如果有人是5-0,他们的排名将高于5-1的某人。

有人会指出我遇到的这些问题正确的方向吗?

  <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();
}
?>

3 个答案:

答案 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。这是多么合适取决于你自己决定。