得点をプレイヤー全員で共有するため、
プレイヤーごとの最高得点をデータベースに保存しようとしています。
この場合、プレイヤーの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 件のコメント:
コメントを投稿