1

私は数週間前から Facebook ゲームを作ろうとしてきましたが、行き詰まっています.おそらく答えるのは簡単な質問ですが、mysql を使用するのは初めてで、助けになるものが見つかりませんでした.インターネット。

私が作りたいのは、確認が許可された後、電子メール、名前、姓などの個人データをバックグラウンドでアップロードし、スコアが高くなった後に既存の値が低い場合はフィールドが更新されるフラッシュ ゲームです。

今のところ、このコードを作成することができました

$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 に答える