可以有 Mysql 表有 2 个唯一列


Possible to have Mysql table with 2 unique columns

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

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";
}
}
玩家

名称列是唯一的,为新玩家插入一个新行,但只有在现有玩家分数高于现有分数时才更新现有玩家分数。

这仅适用于高分和一个级别,但我还需要存储用户的 facebook 名称和多重游戏级别。是否可以让玩家名称和游戏级别列是唯一的,从而我可以获得玩家 1 级 1、玩家 1 级 2 等;请记住,我也必须保持高分。

John

MySQL支持定义为唯一键的列组合。如果您删除玩家名称的索引并为玩家名称+级别添加新索引,则在MySQL方面进行了设置。

这是使用 SQL 完成的方式:

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