2013-12-17 71 views
0

該系統的工作原理,但我相信有另一種編碼方式,以便根據他們的XP點更容易地訪問用戶級別。有沒有更簡單的方法來編碼這個XP到LVL腳本?

$getxp = mysql_query("SELECT `xp` FROM `members` WHERE `id` = '$logged[id]'"); 
$xp = mysql_fetch_array($getxp); 
$x = $xp['xp']; 
echo "$x"; 


$level = MYSQL_QUERY("SELECT * FROM `levels` WHERE `xp` >= '$x' LIMIT 1"); 
while ($n = mysql_fetch_array($level)) { 
$mylvl = $n[level]; 
echo "You are a level $mylvl"; 
} 

我有 '成員'(ID,USERNAME,PASS,XP)和表關於 'LEVELS'(ID,XP,水平)的數據庫表。讓我知道一個更簡單的方法來獲取用戶的LVL。非常感謝!

+0

使用SQL JOIN –

+0

任何代碼示例?我還沒有經歷過SQL JOIN的呢! – Naythan

+0

在您的示例中,您將始終返回用戶的NEXT級別,而不是當前的級別。例如:如果你有18個XP並且是2級(15XP),並且想要進入3級(20XP)。您的查詢將檢查'XP> = 18'的位置。這將返回20,因爲15並不大。因此它會返回,你是一個3級,而不是2級。黑客! – Viridis

回答

0
$sql = "SELECT * FROM levels WHERE xp >= (SELECT xp FROM members WHERE id='".$loggedin['id']."')"; 

子查詢不加入,你必須與各級會員

+0

子查詢請求緩慢的服務器 – Ryan

+0

不知道爲什麼這是-1。從技術上講,這與第一篇文章中的查詢相同。這聽起來就像討厭子查詢。 http://stackoverflow.com/questions/5831603/sql-server-performance-subselect-or-inner-join – Viridis

+0

它只是恨沒有推理subselectlect。因爲它的單個返回子查詢沒有緩慢的查詢問題,他說的是垃圾。 – Dave

1

沒有鑰匙,我認爲這應該這樣做。

SELECT `levels` 
FROM `members` m 
LEFT JOIN `levels` l ON m.`xp` >= l.`xp` 
WHERE m.`id` = '. $logged[id] .' 
ORDER BY `levels` ASC 
LIMIT 1; 

獲取您的member.id = $ logged [id]的所有成員。接下來,將您的member.id鏈接到小於當前exp的所有xp-requirements。這會給你一個你超越的所有級別的列表。現在你唯一需要做的就是以最高級別爲先的方式排列它們,然後將它限制爲1個條目。這應該導致您的exp允許您擁有的最高級別 - 因此您的當前級別。

請注意,當然,級別越高,LEFT JOIN變得越大,最終會消耗更多的SQL服務器內存。

也注意到你正在使用MYSQL。這是過時的,將從下一個PHP版本中刪除。至少看看MYSQLi,或者直接去PDO。這樣,一旦新的PHP版本發佈,您就不必更改所有代碼。

相關問題