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
ご協力いただきありがとうございます。:)