6

私は一種のゲームであるウェブサイトを開発しています。ユーザーの進行状況は MySQL データベースに保存されます。

列の保存 (ID) と列の進行状況 (進行状況はテキスト データ型) を使用してテーブルを保存することで、これを実現したいと考えています。ユーザーが開始すると、進行状況は (たとえば) '0' に設定されます。レベル 1 に進むと進行状況は「0#1」に設定され、レベル 2 に進むと「0#1#2」になります。レベルの順番は自由なので保存したいです。したがって、進行状況は「0#4#2#15」などになります。

これはこれを行う良い方法ですか?私はSQLの経験がなく、信じられないほど愚かなことをしたくありません。テーブル、外部キーなどに関する非常に多くの紛らわしい情報を読みました...

これをお読みいただきありがとうございます。回答をお待ちしております。

ライアン

4

3 に答える 3

4

質問 1 への回答

私はあなたの問題にこのようにアプローチしません。Levelsテーブル ('levelKey' の主キー)、Usersテーブル ('userKey' の主キー)、User_Levelsおよび 'levelKey' と 'userKey' の複合キーを持つテーブルの 3 つのテーブルを作成します。User_Levelsユーザーがレベルを完了したら、テーブルに挿入するだけです。次に、ユーザーがレベルを完了したかどうかを確認するには、次の単純な選択を行います。

SELECT 'a' FROM User_Levels WHERE userKey = ? AND levelKey = ?

行数が > 0 の場合、ユーザーはレベルを完了しています

于 2012-04-17T13:37:17.100 に答える
2

質問 2 については、クエリの量は問題ではないと思います。結局のところ、データにアクセスするのではなく、データベースにデータを書き込んでいるのです。個人的には、ユーザーが実際にレベルを完了するたびに、データベースに「保存」を送信します。

watcher は、レベルとユーザーを異なるテーブルに分割するための優れたアプローチを投稿しました。進行状況のシーケンスは、進行状況が User_Levels に記録される順序から確認できるため、1#3#4#9 のようなものを保存する必要はありません。

ゲームプレイを中断しないように、バックグラウンドで ajax を使用してセーブを送信することをお勧めします。たとえば、jQuery の $.post メソッドを調べてください。または、ゲームがフラッシュの場合は、URLRequest を使用できます。

于 2012-04-17T13:51:55.493 に答える
1

あなたの最初の質問についてですが、ゲームやレベルが個人的に非線形である場合、私は別のアプローチを取ります。ユーザー ID の列と完了レベルの列を含むテーブルを追加するだけです。したがって、ユーザー 1 がレベル 0、4、および 7 を完了した場合、テーブルには 3 つの行があります。

UID  levels_completed
1    0
1    4
1    7

他の質問については、javascript イベントと ajax を使用してページの終了を検出できますが、私はそれに依存しません。必要に応じてクエリを実行するだけです。もしあなたのセッションが破壊されたら、もう手遅れです...

于 2012-04-17T13:38:49.137 に答える