2013年7月25日木曜日

ハイスコアをデータベースに記録&更新

もぐらたたきゲーム系のアプリを開発していますが、
得点をプレイヤー全員で共有するため、
プレイヤーごとの最高得点をデータベースに保存しようとしています。

この場合、プレイヤーのIDを判定して、初めて見るIDならinsert文、
既にあるIDなら得点の判定をして高得点ならupdate文を実行、となるわけです。
mysqlにはIDが既知かどうかに基づいて自動的にinsertとupdateを実行する構文があります。
と言っても、普通のinsert文とupdate文を、 on duplicate key というキーワードで
つないだだけで、ほぼ2個書いてるようなものですが。


insert into もぐらハイスコア set id=3,スコア=100
 on duplicate key
 update id=3,スコア=greatest((select スコア from もぐらハイスコア where id=3),300)

IDが3,初回得点が100点、2回めの得点が300点という仮定でSQL文を作ってみました。

これをphpMyAdminで実行してみると…





このようなエラーが出てしまいます。
テーブル名に日本語を使うと、エラーメッセージで文字化けが起きるんですよね。
なんかうまい設定ないんでしょうか?

で、このエラー自体は、update中にそのテーブルにselectを使用してるのがまずい、ということでした。





このように、副問い合わせのselectでのテーブルに仮名をつけてあげる事で、
エラーなく実行できるようになりました。

0 件のコメント:

コメントを投稿