2

我目前正在建立一个网站,人们可以访问并输入他们跑步、游泳、远足或滑雪的距离。这是我的第一个网站,2-3 个月前我对编码一无所知,所以请记住这一点。

我已经创建了一个存储它的表以及一个将数据提取到排行榜的 leaderboard.php。

这是它现在的样子:

插入表格:

if (!mysqli_query($con,"INSERT INTO total(username, type, distance) VALUES ('$username', '$type', '$distance')"))

并将数据提取到排行榜中:

$result = mysqli_query($con, "SELECT username, distance FROM total ORDER BY distance DESC");
        $rank= 1;


if (mysqli_num_rows($result)) {
            while ($row = mysqli_fetch_assoc($result)) {
                 echo "<tr><td>{$rank}</td>
                      <td>{$row['username']}</td>
                      <td>{$row['distance']}</td></tr>";

            $rank++; 
        }
        }
    ?>  

这样做的问题是,当有人输入他们的用户名/类型/距离时,它会创建新行。所以一个人可以有不同的等级。我希望排行榜能够总结每个用户与不同类型活动的所有距离。

什么是正确的编码?如果可能的话,我只想更改 leaderboard.php 而不是表格,因为我也将这些数据用于网站的其他部分。

4

2 回答 2

1

尝试这个

SELECT username, sum(distance) as total_distance FROM total group by username ORDER BY total_distance desc;

代替

SELECT username, distance FROM total ORDER BY distance DESC;

让我知道它是否有效。

于 2013-10-24T07:31:06.380 回答
0

为了澄清其他人是否有类似的问题,或者对此感兴趣....我不得不进行更多更改,以便显示距离的总和,并且它是按总和排序的,而不仅仅是最大的个人距离。

 $result = mysqli_query($con, "SELECT username, sum(distance), distance as total_distance FROM total group by username ORDER BY sum(distance) desc;");
    $rank= 1;

    if (mysqli_num_rows($result)) {
        while ($row = mysqli_fetch_assoc($result)) {
             echo "<tr><td>{$rank}</td>
                  <td>{$row['username']}</td>
                  <td>{$row['sum(distance)']}</td></tr>";

        $rank++;

        }
    }
?>

那是我完成的代码^

于 2013-10-24T08:00:11.220 回答