我正在努力为下个月参加的高尔夫锦标赛创建一个排行榜,而我却无法弄清楚如何让它发挥作用。
我有一个分数入口页面,它正在转储到我的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()
问题,我在查询中做错了什么来实现这一点?
任何帮助都会很棒!
答案 0 :(得分:0)
问题似乎与您使用(而不是使用)列的别名有关。您在列名称total
和total
之间混淆了各个得分的总和。因此,在总计列中创建一个新的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