创建高尔夫锦标赛排行榜

时间:2015-08-10 03:58:40

标签: php mysql database

我正在努力为下个月参加的高尔夫锦标赛创建一个排行榜,而我却无法弄清楚如何让它发挥作用。

我有一个分数入口页面,它正在转储到我的SQL数据库中,它可以正常运行(所有分数/名称/总数都在进入),[1]并填充分数,因为我希望它们显示在排行榜上,这也很好 我甚至GROUP BY将它们放在一起,这样就没有重复[2]。

我遇到的问题是我无法让GROUP BY将总列添加到一起。我已经多次尝试在我的查询中执行SUM(total),但它总是淘汰总数[3]。 here is what it looks like(上面的每个数字都是图片)它没有显示刚刚填充的任何分数。

这是我当前的查询:

$servername = 'mysql.thisplace.com'; 
$username = 'name'; 
$password = 'pword'; 
$dbname = 'dbase'; 

$conn = new mysqli($servername, $username, $password, $dbname); 

if ($conn->connect_error) {
die("Connection failed  " . $conn->connect_error);
}
$sql = "SELECT name, sum(total) FROM matchplay GROUP BY name ORDER BY -total DESC";
$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) > 0) {
// output data of each row
while($row = mysqli_fetch_assoc($result)) {
echo "Name " . $row["name"] . " Score " . $row["total"]. "<br>";
}
} else {
echo "0 results";
}
mysqli_close($conn);
?>

我们所有人之间将进行4轮比赛,所以这是我的问题:

如何从16个不同的家伙中获得4轮加起来并展示领导者?什么是最好的查询?对于SUM()问题,我在查询中做错了什么来实现这一点?

任何帮助都会很棒!

1 个答案:

答案 0 :(得分:0)

问题似乎与您使用(而不是使用)列的别名有关。您在列名称totaltotal之间混淆了各个得分的总和。因此,在总计列中创建一个新的alias作为Score并按别名排序。这样,SQL就不会在sum和列名之间混淆。

将您的查询修改为

SELECT name, sum(total) as Score FROM matchplay GROUP BY name ORDER BY Score desc;

上面的查询似乎可以解决问题并返回所需的结果。!!

除此之外,将while循环修改为

while($row = mysqli_fetch_assoc($result)) {
echo "Name " . $row["name"] . " Score " . $row["Score"]. "<br>";
}

使用SQLFiddle here