1

Stackoverflow コミュニティの皆様、こんにちは。

初めての投稿なので、英語が下手で申し訳ありません!:)

すべてを読みたくない場合、質問はこのようにマークされます。

タイトルは少し誤解を招きますが、より良い方法で説明する方法がわかりませんでしたが、詳細な説明で理解できるはずです。

ゲームサーバーがゲームで発生する多くのアクションをログに記録する大きなログテーブル (現時点で約 500000 行) があります。最も効率的な方法で特定のログ行を抽出したいと考えています。

ゲーム サーバーのログ システムを変更することはできません。できれば、より多くのログ テーブルに変更して、よりコンパクトなログを作成します。(そのテーブルでクエリを実行するには時間がかかるため..)

今私の問題は、特定のタイプの最後のログ行を特定のプレーヤー ID から取得して、プレーヤーの最後のアクションを取得したいということですが、効率的な方法でそれを行う方法がわかりません。例:

SELECT * FROM log WHERE logType = "PLAYER" AND playerID = [playerID] ORDER BY time DESC LIMIT 1

次に、Web サイトの出力は次のようになります。You last action was [人間が読めるアクションと追加情報].

MySQL プロファイリングは、結果のソートに最も時間がかかることを示しています。

今私の質問は:特定のプレーヤー ID とタイプの最後の行のみを取得することは可能ですか? auto_increment があるため、ID で実行できると思います。最高の ID、特定のタイプ、特定のプレーヤー ID を持つ行を取得することは可能ですか?

テーブル構造: ID(int) | logType(varchar) | 時間(日時) | プレーヤーID(整数) | positionX(整数) | 位置Y(整数) | アクション ID (整数) | アクション (varchar) | ヒント (varchar) | ip(varchar) | アイテム番号(int)

説明:

ID: ログに記録されたアクションの一意の ID

logType: 記録されたアクションのタイプ (例: "PLAYER" または "ITEM")

time: アクションが発生した時間

playerID: プレイヤーの ID (またはそのタイプに関連する他の ID)

positionX: ゲーム内の X 位置

positionY: ゲーム内の Y 位置

actionID: アクションに関連する ID (例: ログ アクションが「KILLED_BY_PLAYER」の場合、プレイヤーを倒した他のプレイヤーのプレイヤー ID)

action: ログに記録されるアクション (例: KILLED_BY_PLAYER)

ヒント: プレーヤーの名前などの役立つヒント

ip: プレイヤーの IP

itemNumber: アイテムが含まれる場合はアイテムの番号、そうでない場合は NULL

ご協力いただきありがとうございます。:)

4

2 に答える 2

1

最高のIDを取得するには:

select max(id) from table;

他のものは、select ステートメントに where 句を入れることができます。

于 2013-04-03T14:17:40.757 に答える