私は、日常的に変更できるMMOゲームのための300人の最高ランクの選手を表示するシステムを構築しています。ダブルリミットオプションの選択行
トップ300人の選手を選んで、300人の選手に対して、私が選んだ同じテーブルから最後の30個のエントリを選択します。
ここでは、現在のクエリがあります。これは、正常かつ正確に上位300人のプレイヤーを選択します。
SELECT * FROM `experiencehistory` WHERE `worldid` = `7` ORDER BY `experiencehistory`.`date` DESC, `experiencehistory`.`rank` ASC LIMIT 300
これは私のデータベース構造である:
ID - Identifies the entry for deletions etc later on.
Characterid - Which character does this entry belong to.
worldid - On which world does this character exist
rank - what is the current (at the time of the entry, which is daily) rank the player has
date - what date was the entry made on. (It saves a date through mktime() which is the day at 4am, all date entries for a specific date is the same.
は今、前に述べたように私は選手を持って上記のクエリを使用して、どのように私は、このクエリはまた、彼らの最後の30個のエントリを取得することができますか?私は、それがうまくいかないと思っていませんでした。文字ごとに別のクエリをループして実行するだけでした。これは10-15秒のページの読み込みと多くのリソースの使用で終わりました。明らかに実際の環境では動作しませんでした。
私はGroup byを使用することを考えていますが、どのようにしてそれらを選択するのかはわかりません。すべての助けに感謝します。
プレイヤーごとに最大30レコード、最大9000レコードが必要ですか?それとも、主人公の行に何らかの形でそれらを集約したいですか? – cyberbit
それは私には意味がありません、あなたはこの文章を言い換えてください:*私は現在のトップ300です選択した同じテーブルから30の最後のエントリを選択したいと思います。* –
Cyberbitは、私は英語が上手ではありませんが、あなたがしたいことを正確に得ています。だから、それは9000レコードになります。私は毎週と毎月の変更にそれを統合するつもりです(その部分が機能しているので、データの抽出方法を理解する必要があります)。 – Hultin