2012-08-29 86 views
3

我使用MySQL數據庫來記錄一個遊戲,我創建球員榜的指標。 MySQL數據庫正在通過一個PHP文件「highscores.php」進行訪問。PHP MySQL的 - 獲取特定的行

的高分都記錄在數據庫內,但我想用PHP文件來實現實際的等級號碼。我希望能夠查詢特定球員的排名,而不是隻查詢他/她的高分。

我用這讓我的球員的高分:

$username = $_GET["username"]; 

$checkID = mysql_query("SELECT * from Highscores WHERE Username = 
'$username' ORDER BY Score DESC"); 

$row = mysql_fetch_array($checkID); 

echo $row["Score"]; 

現在讓我的球員的排名在所有其他球員,我需要做的是找到行的索引問題......但我該怎麼做?

在此先感謝!

+2

只要你知道,你有一個潛在的安全漏洞就在這裏。 SQL注入可能是令人討厭的。你可以強行搜索行,但我懷疑有人會知道一個很酷的SQL方法。 – thatidiotguy

+0

是的..在這裏插入強制性的「使用mysqli或PDO」評論。此處插入強制性的「SQL注入風險」註釋。 –

+0

@MikeBrant:不要忘了強制性XKCD鏈接:[http://xkcd.com/327/](http://xkcd.com/327/)。 –

回答

0

根據您的數據庫設計,我不知道你有其他比選擇從DB通過得分排序整個評分表多選項,通過它賦值評分指數值對每個項目,但只拉出環那些特定於您的用戶的顯示。

這聽起來像你可能想要考慮運行一些過程來定期對數據庫中的分數進行排名,或者可能創建一個存儲過程來選擇所有socres,給他們排名值,並從中選擇與用戶相關的他們。

3

你可以用SQL做直接像這樣:

SELECT @rownum:[email protected]+1 ‘rank’, h.* 
FROM Highscores h, (SELECT @rownum:=0) r 
ORDER BY score DESC; 
+0

這對於爲論壇應用程序添加期待已久的功能非常有用。我想查找給定評論的頁碼。 我嵌套在這個查詢另一個查詢內獲得這樣精確的單號: SELECT'index' FROM \t(SELECT @rownum:= @ ROWNUM + 1'index',C * \t FROM內容C,( SELECT @rownum:= 0)R \t其中PID = 6#[郵政ID] \t ORDER BY ID)AS TMP WHERE ID = 32#[註釋ID] – vishva8kumara

1

你可以這樣做 -

// gets all the records with higher scores than current user 
$ranking = mysql_query("SELECT count(*) AS ranking FROM Highscores WHERE Score > (SELECT Score FROM Highscores WHERE Username = '$username' ORDER BY Score DESC LIMIT 1)"); 
// creates an array from the mysql query above 
$ranking_array = mysql_fetch_assoc($ranking); 
// gets the number of higher scores from the array 
$ranked_above = $ranking_array['ranking']; 
// takes the total number ranked above and adds a 1 to get their rank 
$current_rank = $ranked_above++; 

請注意上面關於SQL注入的意見,而不再使用mysql_功能。

+0

我試過,但還是被「資源ID#9 「... 我究竟做錯了什麼? – user1634334

+0

對不起,我的錯誤。在php中執行'mysql_query'時,會將結果作爲資源,因此您必須使用'mysql_fetch_assoc'將結果放入數組中才能使用它。我編輯了我的答案。您可以瞭解更多有關這在 - [stackoverflow.com/questions/5523840/what-is-the-notice-resource-id9](http://stackoverflow。com/questions/5523840/what-is-notice-resource-id9)或者[stackoverflow.com/questions/4831364/what-are-resources?rq=1](http://stackoverflow.com/questions/4831364 /什麼,是資源?RQ = 1) – Sean