我目前使用此代码保存游戏分数:
function SubmitScore()
{
global $result, $db;
$playername = $db->real_escape_string(strip_tags($_POST["playername"]));
$score = $db->real_escape_string(strip_tags($_POST["score"]));
$fbusername = $db->real_escape_string(strip_tags($_POST["fbusername"]));
$gamelevel = $db->real_escape_string(strip_tags($_POST["gamelevel"]));
$query1 = "SELECT * FROM leaderboard WHERE playername = '$playername'";
$query2 = "INSERT INTO leaderboard (playername, score,fbusername,gamelevel) VALUES ('$playername', $score,'$fbusername','$gamelevel')";
$query3 = "UPDATE leaderboard SET score = $score WHERE playername = '$playername'";
$scores = $db->query($query1);
if ($scores->num_rows == 0)
{
$db->query($query2);
$result = "0:New entry";
}
else
{
$row = $scores->fetch_object();
$oldscore = $row->score;
if ($score > $oldscore)
{
$db->query($query3);
$result = "0:Successful update";
} else
$result = "0:Score was lower than before";
}
}
playername列是唯一的,为新玩家插入一个新行,但只有在现有玩家得分高于现有玩家时才会更新。
这对于高分和一个级别来说很好,但我还需要存储用户的facebook名称和多重游戏级别。 是否可以将playername和gamelevel列设置为唯一,从而可以获得玩家1级别1,玩家1级别2等; 请记住,我也必须保持高分。
约翰
答案 0 :(得分:2)
MySQL支持将列的组合定义为唯一键。如果你删除了playername的索引并为playername + level添加了一个新的,你可以设置为MySQL。
这是用SQL完成的:
ALTER TABLE `leaderboard` DROP INDEX `unique_index`;
ALTER TABLE `leaderboard` ADD UNIQUE `unique_index`(`playername`, `gamelevel`);