可能有2个唯一列的Mysql表

时间:2015-03-16 23:36:14

标签: php mysql sql

我目前使用此代码保存游戏分数:

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等; 请记住,我也必须保持高分。

约翰

1 个答案:

答案 0 :(得分:2)

MySQL支持将列的组合定义为唯一键。如果你删除了playername的索引并为playername + level添加了一个新的,你可以设置为MySQL。

这是用SQL完成的:

ALTER TABLE `leaderboard` DROP INDEX `unique_index`;
ALTER TABLE `leaderboard` ADD UNIQUE `unique_index`(`playername`, `gamelevel`);