1

几周以来我一直在尝试制作一个 facebook 游戏,但我被困住了.. 这可能是一个容易回答的问题,但这是我第一次使用 mysql,我没有找到可以帮助我的东西互联网。

我想做的是一个 Flash 游戏,人们在确认后在后台上传他们的个人数据,如电子邮件、姓名、姓氏,并获得分数,在获得更高分数后,如果现有值较低,则字段更新。

现在我已经设法创建了这段代码

$dbhost     = 'bla bla';
$dbuser     = 'bla bla';
$dbpass     = 'bla bla';
$data       = 'bla bla';



$db = mysql_connect($dbhost, $dbuser, $dbpass);

if (mysql_errno() > 0) {
if (mysql_errno() == 1203) {
    die("DB error");
} else {
    die("DB error");
}
}

if ($_REQUEST['action'] == "add") {
mysql_select_db($data, $db);
$insert = "INSERT INTO FB (UID, first_name, last_name, email, link) 
VALUES (

    '".$_REQUEST['uid']."', 
    '".$_REQUEST['first_name']."', 
    '".$_REQUEST['last_name']."', 
    '".$_REQUEST['email']."', 
    '".$_REQUEST['link']."'

    )";

$res = mysql_query($insert, $db) or die ("Save Error");
mysql_close($db);
echo "Added to DB!";
}

它工作得很好,但它有一个问题..如果我再次提交我的字段,另一个重复的行会出现在表中,并且具有相同的信息。

我希望用户只提交一次.. 因此有一个唯一的行,如果他设法获得更高的分数,则只更新他的分数。

任何帮助,将不胜感激 :)

4

2 回答 2

2

创建一个适当的UNIQUE密钥,然后使用INSERT ... ON DUPLICATE KEY UPDATE

ALTER TABLE FB ADD UNIQUE KEY (UID);

INSERT INTO FB
  (UID, first_name, last_name, email, link) 
VALUES
  (123, 'foo', 'bar', 'foo@bar.com', '')
ON DUPLICATE KEY UPDATE
  first_name = VALUES(first_name),
  last_name  = VALUES(last_name),
  email      = VALUES(email)
  link       = VALUE(link)
;
于 2012-12-19T15:03:35.677 回答
0

原始海报提到了一些关于评分的事情,但它没有作为表格中的一列出现......这应该检查新分数是否低于当前分数,如果是,那么新分数将分配给更新中的字段,否则使用当前分数。

$insert = "INSERT INTO FB (UID, first_name, last_name, email, link, score) 
VALUES (
    '".$_REQUEST['uid']."', 
    '".$_REQUEST['first_name']."', 
    '".$_REQUEST['last_name']."', 
    '".$_REQUEST['email']."', 
    '".$_REQUEST['link']."', 
    '".$_REQUEST['score']."'
    )
ON DUPLICATE KEY UPDATE
score = IF(score < VALUES(score), VALUES(score), score)
";
于 2012-12-19T15:15:13.270 回答