簡體   English   中英

MySQL僅獲取查詢中具有最高ID的行

[英]MySQL get only the row with the highest ID of a query

您好Stackoverflow社區,

這是我在這里的第一篇文章,對於英語不好,我深表歉意! :)

如果你不想讀的一切,該問題被標記成這樣

標題有點誤導,但是我不知道如何更好地解釋它,但是詳細的解釋應該讓您理解:

我有一個很大的日志表(此時大約有500,000行),游戲服務器在其中記錄游戲中發生的許多動作。 我想以最有效的方式提取一些特定的日志行。

我無法更改游戲服務器的日志記錄系統,如果可以的話,可以將其更改為更多的日志表,以創建更緊湊的日志。 (因為在該表上執行查詢需要花費時間。)

現在我的問題是,我想從特定的玩家ID中獲取特定類型的最后一個日志行,以獲取玩家的最后一個動作,而我不知道如何有效地做到這一點。 例:

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

那么,網站上的輸出將是:您的最后一個動作是[人類可讀的動作和其他信息]。

MySQL分析現在告訴我,結果排序需要花費大量時間。

現在我的問題是: 是否只能獲取特定玩家ID和類型的最后一行? 我猜可以用ID完成,因為它具有auto_increment。 那么能否獲得具有最高ID,特定類型和特定玩家ID的行?

表結構:ID(int)| logType(varchar)| 時間(日期時間)| playerID(int)| positionX(int)| positionY(int)| actionID(int)| 動作(varchar)| 提示(varchar)| ip(varchar)| itemNumber(int)

說明:

ID:已記錄操作的唯一ID

logType:記錄的操作的類型(例如:“ PLAYER”或“ ITEM”)

時間:動作發生的時間

playerID:玩家的ID(或與該類型有關的其他ID)

positionX:游戲中的X位置

positionY:游戲中的Y位置

actionID:與該動作相關的ID(例如:如果日志動作為“ KILLED_BY_PLAYER”,則是殺死該玩家的其他玩家的玩家ID)

操作:已記錄的操作(示例:KILLED_BY_PLAYER)

提示:一些有用的提示,例如播放器的名稱

ip:播放器的IP

itemNumber:物料的編號,如果涉及物料,則為NULL

謝謝你的幫助。 :)

獲得最高的ID:

select max(id) from table;

其他的則可以在select語句中放置where子句。

您應該可以在按LIMIT 1進行time排序的地方使用查詢。 如果您對列的排序time很慢,則必須確保索引已優化(在查詢中運行explain )。 您將同時需要logtypeplayer_idtime索引。 即使有50萬行,這也不是問題...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM