2017-06-05 67 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