2017-06-05 44 views
0

有一张桌子上有玩家的名字和分数。PHP/MySql - 计算得分的地方

在“成绩”表有:

id | playername | score 
1  player1   275 
2  player2   1095 
3  player3   57 
4  playerme  457 
5  player4   1854 
6  player5   645 

我如何可以打印得分发生在PHP的“playerme”的球员?

如果'玩家'获得第一名,请看这个文本:'恭喜,您赢得了第一名'。 如果'玩家'获得第二名,看看这个文字:'是的,你赢得了第二名'。 如果'玩家'获得第3名,请看这段文字:'嘿,你赢得了第3名'。等...

+0

相关https://stackoverflow.com/questions/14025959/how-can-i-make-a-basic-php-scoreboard –

+0

感谢,但它不是我所需要的。我想在游戏中发短信给玩家自己的位置。从MySql –

+0

我知道,这只是相关的。我正在写一个答案。 –

回答

3

你需要连接,抓住所有的东西,然后回声到table。连接代码是从w3schools。假设有一个表stats一个名为usernamescore领域:

<html> 
<body> 
<table style="width:100%"> 
    <tr> 
    <th>Username</th> 
    <th>Score</th> 
    </tr> 
<?php 
$servername = "localhost"; 
$username = "username"; 
$password = "password"; 
$dbname = "myDB"; 

// Create connection 
$conn = new mysqli($servername, $username, $password, $dbname); 
// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 

$sql = "SELECT username, score FROM stats ORDER BY ABS(score) DESC"; 
$result = $conn->query($sql); 
if ($result->num_rows > 0) { 
    // output data of each row 
    while($row = $result->fetch_assoc()) { 
     echo "<tr><td>" . $row["username"] . "</td><td>" . $row["score"] . "</td></tr>"; 
    } 
} else { 
    echo "0 results"; 
} 
$conn->close(); 
?> 
</table> 
</html> 

您需要使用ORDER BY,在SQL命令的结果,由score列。

编辑#1:我改变ORDER BY scoreORDER BY ABS(score) DESC因为我注意到它没有命令权(inspired by this answer

SQL FIDDLE(只是查询):http://sqlfiddle.com/#!9/78f41/9/0

为了突出你的名字,只要将输出循环修改为此,只需将background-color: #ffff99;添加到该行,如果它匹配$yourusername。您需要弄清楚如何获取当前用户的名称,并将它设置为$yourusername。下面是编辑循环:

while($row = $result->fetch_assoc()) { 
      if ($yourusername == $row["username"]) { 
       echo "<tr style='background-color: #ffff99;'><td>" . $row["username"] . "</td><td>" . $row["score"] . "</td></tr>"; 
      } else { 
       echo "<tr><td>" . $row["username"] . "</td><td>" . $row["score"] . "</td></tr>"; 
      } 
     } 

它采用style,检查出cssdesk:http://www.cssdesk.com/sq7Qq

+0

我编辑了我的问题 –

+1

@GeneralAgro我回答了你的问题。删除编辑,然后询问另一个。你不能只是继续添加东西给我们为你做。 –

+0

谢谢Noah,我知道如何显示MySql的结果,我只是不知道如何显示表中行的编号位置。 –

1

除了诺亚克里斯蒂诺的回答是:你需要玩家进行排序根据得分这可以与顺序完成BY但如果你还需要位置的玩家/等级必须扩展这个SQL查询:

SELECT p.id, p.name, p.score, p.rank FROM (
    SELECT t.id, t.name, t.score, @rownum := @rownum + 1 AS rank 
    FROM players t, (SELECT @rownum := 0) r 
    ORDER BY score DESC 
) as p ORDER BY rank; 

小提琴:http://sqlfiddle.com/#!9/f5e3a3/9/0

或在此主题中查看更多信息:ROW_NUMBER() in MySQL

+0

这是诺亚克里斯蒂诺。由于查询已满,我无法编辑您的答案。 –

+0

错,再次xD –

+0

对不起!现在是对的:) – ilovemilk

1

根据将他们从桌面上拉出的位置,我会稍微改进@NoahCristino的回答,以回应玩家的位置。

<html> 
<body> 
<table style="width:100%"> 
    <tr> 
    <th>Place</th> 
    <th>Username</th> 
    <th>Score</th> 
    </tr> 
<?php 
$servername = "localhost"; 
$username = "username"; 
$password = "password"; 
$dbname = "myDB"; 

// Create connection 
$conn = new mysqli($servername, $username, $password, $dbname); 
// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 

$sql = "SELECT username, score FROM stats ORDER BY ABS(score) DESC"; 
$result = $conn->query($sql); 
if ($result->num_rows > 0) { 

    //Start a place counter 
    $place = 1; 

    // output data of each row 
    while($row = $result->fetch_assoc()) { 
     echo "<tr><td>". $place ."</td> <td>". $row["username"] ."</td></tr>"; 

    //Increment the place 
    $place++; 

    } 
} else { 
    echo "0 results"; 
} 
$conn->close(); 
?> 
</table> 
</html> 
+0

是的,它几乎是,但我不想显示所有的记分牌,我只想显示位置/地点和问候文本。 –

+0

更新了我的答案,但不需要太多努力就可以删除$ row [“score”]变量;) – Adam