【问题标题】:Ordering by a selected column from database按数据库中的选定列排序
【发布时间】:2015-10-19 05:53:14
【问题描述】:

我有下表,旨在显示输赢记录和排名。不过,我遇到了两个问题。

  • 第一个问题是我的等级<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();
}
?>

【问题讨论】:

    标签: php mysql while-loop html-table


    【解决方案1】:

    你需要像这样使用ORDER BY

    这样做:

    SELECT * FROM team_rankings WHERE `division`=1" ORDER BY Wins DESC, Losses
    

    更多:link

    对于您的第一个问题,&lt;/table&gt; 需要脱离您的 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

    【讨论】:

    • 重读问题我认为应该是 SELECT * FROM team_rankings WHERE division=1" ORDER BY Wins DESC, Losses(给出 5-0, 5-1 。 ..)
    • @PaulF Chris 感谢大家的关注。答案已更新。
    • 我收到此行的错误int $count = 0;.....Parse error: syntax error, unexpected '$count' (T_VARIABLE)。为什么 foreach 会更好?
    • 删除$count之前的int foreach不需要初始化$count,我们必须在while循环中进行
    • 明白了。我将 count 变量更改为等于 1,这样 0 就不会出现,但一切都很完美。谢谢!
    【解决方案2】:

    编号问题可以这样解决:

    $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”(在循环外),将该变量作为&lt;td&gt; 中的数字回显,并在循环关闭之前递增变量$i++

    哦,是的,不要在循环中关闭您的&lt;table&gt;。 :)

    【讨论】:

      【解决方案3】:

      您似乎想在查询中使用ORDER BY clause。它可以直接按列排序,也可以通过某种计算排序。例如,您可以这样做:

      SELECT *
      FROM team_rankings
      WHERE division = 1
      ORDER BY
          (wins - losses) DESC,
          wins DESC
      

      这样 1-0 的排名会高于 6-6 但低于 2-1。这有多合适由您决定。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-01-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-20
        • 2021-12-07
        相关资源
        最近更新 更多