2012-04-17 16 views
5

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

テーブルの保存にはカラムセーブ(ID)とカラムの進捗状況が必要ですが、進捗状況はデータタイプのテキストになります。ユーザが開始すると、進捗は(例えば)「0」に設定される。レベル1に進むと、進捗は「0#1」に設定され、レベル2は「0#1#2」に設定されます。レベルの順序は自由で、私はそれを保存したい。進捗状況は「0#4#2#15」などとなります。

これは良い方法ですか?私はSQLに関する経験がなく、私は信じられないほど馬鹿なことをしたくありません。私はテーブル、外字などの情報を混乱させてしまいました。

私はこのことを読んでくれてありがとうと思います。あなたの質問1

ライアン

+0

複数の質問に分割してください。 –

+0

「バッファ」ではなく「キャッシュ」を意味するのでしょうか? – Widor

+0

@Janあなたは正しいです。 – Ryan

答えて

2

回答私はあなたの問題をこのように近づかないだろう。 Levelsテーブル( 'levelKey'のプライマリキー)、Usersテーブル( 'userKey'のプライマリキー)、User_Levelsテーブル(levelKeyとuserKeyの複合キー)の3つのテーブルを作成します。ユーザーがレベルを完了したら、User_Levelsテーブルに挿入します。その後、ユーザーがレベルを完了したかどうかを確認するためには、単純な選択である:

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

行数>が0の場合はゲームならば、ユーザーは/、あなたの最初の質問についてのレベルに

+0

これは私の意見では多くのアプローチです。レベルが完了した順序を維持する必要がある場合は、序数の値を持つUser_Levelsの3番目の列を持つことができます。たとえば、ユーザー2がレベル1,4、および2の順番で完了すると、テーブルには、 '(userKey、levelKey、ordinalValue)'のエントリには(1,1,1)、(1,4,2)、 (1,2,3)。 – mdoyle

+0

本当に、回答に必要な列(キー)が列挙されているだけです。レベル、ユーザー、または2つの間の関係(User_Levels)を記述する任意の量の情報をタックすることができます。 –

+0

"これは多くのアプローチです" = "ウォッチャーはもっと良いアプローチです"。 Sheesh。 – mdoyle

1

を完了しましたレベルは個人的には非線形ですが、私は別のアプローチを採用します。私は単純にユーザーIDの列と完成レベルの列を含むテーブルを追加します。ページの閉鎖を検出するために、JavaScriptのイベントやAJAXを使用することができ、あなたの他の質問について

UID levels_completed 
1 0 
1 4 
1 7 

が、私はないでしょう:ユーザー1はレベル0、4と7を完了した場合ので、私のテーブルには、3行を持っているでしょうそれに頼る。私は必要なときにいつでもクエリを実行します。あなたのセッションが破壊された場合、あなたはすでに遅すぎます...

+0

レベルは「セクション」によく似ていて、それらの束がたくさんあります。プレーヤーが前後に行くことができるので、注文は重要です。 プレイヤーがゲームを再開すると、進行状況を配列に読み込んでいます。 ユーザー数が多く、ユーザーあたりのセクション数が多いため、これはまだ良いアプローチですか? – Ryan

+0

@Ryanこれは単なる基本的な例ですが、追加情報を追加する場合は、追加情報を含む列を追加できます。いずれの方法でも、1つのフィールドに多くの情報が圧縮されたテーブルよりも、このようなテーブルでの操作が容易になります。 – jeroen

2

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

ウォッチャーはレベルとユーザーを別のテーブルに分割するための優れた方法を投稿しました。進捗状況は、進行状況がUser_Levelsに記録される順番から見ることができるので、1#3#4#9のようなものを保存する必要はありません。

おそらく、ajax、あなたはゲームのプレイを中断しません。たとえば、jQuery's $.post methodを参照してください。また、あなたのゲームがフラッシュであれば、URLRequestを使うことができます。

関連する問題