2012-02-23 4 views
3

私は、フィールドランク、名前、スコア、udid(ユニークなデバイス識別子)を持つmysqlデータベースを使って、iphoneゲーム用のシンプルなオンラインハイスコアシステムを持っています。私はudidから複数のスコアを持ちたいとは思っていません。私の質問は、古いスコアが削除され、新しいスコアが挿入されたことを確認する方法です。mysqlを使ってプレーヤーから得点を更新

スコアを挿入するための私のコードは次のとおりです。

// Insert the score 

$retval = mysql_query("INSERT INTO $table(
     udid, 
     name, 
     score 

    ) VALUES (
     '$udid', 
     '$name', 
     '$score' 

    )",$conn); 

if($retval) { 
    echo "Inserted score $score for $name"; 
    } 

だから私は古いスコアを上書きして新しいものを挿入します。あなたの助けのための

おかげで、

乾杯、ジョー

EDIT:

私はPHPプログラマはないですので、あなたがしたい場合は、簡単な例を提供してください、事前に感謝!

答えて

4

REPLACEしかし、他の人が示唆しているように、REPLACEは行の実際の削除を行い、新しいものを挿入します。これは高価なパフォーマンス上の問題です。

INSERT INTO tablename (udid, name, score) 
    VALUES (12, 'Marcus', 100) 
    ON DUPLICATE KEY UPDATE score = 100 WHERE udid = 12 

これが機能するためにudid上の主キーまたはユニーク・キーがあることを確認します。

は私があなたの代わりにINSERT ... ON DUPLICATE KEYを使用することをお勧めします。

+0

$ RETVAL =するmysql_queryを動作しないことを確認してください\t名称、 \t \t \tスコア \t \t)VALUES( \t \t \t '$ UDID'、 \t \t \t '$ name' を、 \t \t \t '$スコア' \t \t))$ CONN、「UDID = $ UDID DUPLICATE KEY UPDATEスコアON ;
しかし、スコアを挿入できません。SQL構文にエラーがあります。あなたのMySQLサーバのバージョンに対応するマニュアルを調べて、正しい構文が11行目の「WHERE udid = 1111」の近くで使用するようにしてください。 – coderjoe

+0

ほぼです。このUPDATE score = '$ score' WHERE'のような割り当てが必要です。 –

+0

$ RETVAL =するmysql_query( "$表に挿入( \t \t \t UDID、 \t \t \t名、 \t \t \tが \t \t)VALUES( \t \t \t '$ UDID'、 \t \t \t」をスコア$ name '、 \t \t \t' $ score ' \t \t)DUPLICATE KEY UPDATEスコア= '$ score' WHERE udid = '$ udid' "、$ conn);与える:右の構文は、 'WHERE' 1111 '' 11行目近くで使用する – coderjoe

1

mysql:documentationREPLACEキーワードを見てください。

テーブル内の古い行がPRIMARY KEYまたはUNIQUE インデックスの新しい行と同じ値を持っている場合、新しい行がある前に、古い行が削除されることを除いて、正確にINSERTのような作品をREPLACE挿入された。

0

REPLACE INTOです。

続きを読むhere

+0

私はiPhoneのプログラマーですが、これを実装する方法については分かりませんが、例を挙げることはできますか?前もって感謝します。 – coderjoe

+0

構文は私がリンクしているページにありますが、本質的に、新しいレコードを入力するか、独自のフィールド(あなたの場合は 'udid')に基づいて既存のレコードを更新することができます。 例: 'your_table INTO REPLACE(UDID、名前、スコア)VALUES( '$ UDID'、 '$名'、 '$スコア')' は(あなたが変数を適切にエスケープしていることが前提です) – SenorAmor

0

データベースの値を上書きするには、update-statementを使用する必要があります。

update table set field=value where id=$theudid 
1

あなたが望むものは、それが存在するか、そうでなければ挿入すると思います。過去に同じ状況で私のために働いていたINSERT ... ON DUPLICATE KEY UPDATEという組み込みの方法があります。

+2

これはおそらくです最善のアプローチ - が、(「 \t \t、 \t \t \t UDID($表に挿入「UDID」はMySQLのテーブルの主キーまたは一意キーとしてマークされている、またはこれは – Daan

関連する問題