2013-10-24 52 views
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而不是表格,因为我也使用这些数据用于网站的其他部分。

回答

1

尝试此相反的

SELECT username, distance FROM total ORDER BY distance DESC; 

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

,让我知道,如果它的工作与否。

+1

感谢您回应!它现在显示用户名分组,并按正确的顺序,但距离不显示 – Arborelius

+0

我增加了距离“选择用户名,距离,总和(距离)作为total_distance从总组按用户名ORDER BY total_distance desc;”现在它可以工作。谢谢您的帮助! – Arborelius

+0

@Arborelius欢迎。如果它有帮助,你可以进行投票并选择这个答案。 –

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++; 

     } 
    } 
?> 

那是我完成的代码^