2010-11-23 7 views
0

ここでは説明を簡単にするために、この説明を使用します。タスクをまとめてグループ化する

ゲームでは、弓兵と騎兵隊を作ることができる建物があるとします。あなたは5つの射手のために、3つの騎兵が続いて、さらに4つの射手のために別の命令を発注します。この例では

私はMySQLのテーブルを持っています。今、私は順番待ち行列に単位を表示したい

`id` INT UNSIGNED NOT NULL AUTO_INCREMENT 
`buildingid` INT UNSIGNED NOT NULL 
`unit` ENUM('Archer','Cavalry') NOT NULL 
`complete` TIMESTAMP NOT NULL 

。このスタイルのほとんどのゲームでは、5つの射手、3つの騎兵、および4つの他の射手が1つの行に表示されます。しかし、私は待ち行列の長さを制限したくないので、これは大きな命令(例えば、200の射手)に対して非常に乱雑になる可能性があります。

私は返すことができるでしょうbuildingid, unit, count, next、 "count "はユニットの数であり、" next "は完了する最も早いユニットのタイムスタンプです。

私はGROUP BYクエリを使用することができましたが、これは間にある騎兵にかかわらずすべてのアーチャーをまとめてグループ化します。私はユニットタイプでグループ化する方法が必要ですが、連続したエントリに限られています。

これまでの私のこれまでの試みは成功しましたが、1000個のユニットを注文したときにサーバーが完全にクラッシュしました。私は私がはっきりと十分に何をしようとしている説明を願ってい

...

+0

前のクエリを投稿してください。索引を追加するだけで済みます。 –

+0

さて、それは約1年前に試してみましたが、コードはそれほど良くないので、私は何を考えているのか理解できません...しかし、一般的なアイデアは " 、そして、同じではない最初のタスクを得る "、終わりに達するまで繰り返される...または何か。うわー、私のコーディングは一年前に吸ったo_O –

+0

しかし、当時、私はIndexesについて知らなかったので、おそらくそれが問題の唯一の原因です! –

答えて

0

正解は「数量」フィールドを追加することで、データベース内のグループ彼らにあります。時間が経過したら、量を1つ減らし、次の完了時間のためにタイマーをリセットするか、量がゼロの場合は行を削除します。

関連する問題