2013-04-20 73 views
0

我想從我的數據庫中獲取數據,其中一個字段是最大的,此時我在2個查詢中執行此操作。事情是我不想重載服務器,所以我正在尋找一種方法,使其在1查詢。有什麼建議麼? 正如你所看到的,我正在尋找時間戳最大的條目。從表中獲取一個字段在一個查詢中最大的數據

$query = "SELECT MAX(TIMESTAMP) AS timestamp FROM `data`"; 
$run_query = mysql_query($query); 
$highest = mysql_result($run_query,'0','timestamp'); 

$query = "SELECT * FROM `data` where `timestamp`='$highest'"; 
$run_query = mysql_query($query); 

在此先感謝。

回答

1

的選擇,如果你能保證絕不會有兩條記錄具有相同時間戳:

SELECT * 
FROM data 
ORDER BY timestamp DESC 
LIMIT 1 

如果你能有重複的時間戳,然後與子選擇其他的答案是更好的解決方案。

+0

謝謝,我想我會用它。 – 2013-04-20 15:56:20

1

這將只是你想要的工作。

SELECT * 
FROM data 
WHERE timestamp = (SELECT MAX(timestamp) FROM data) 

Backticks在這種情況下是可選項。但實際上timestamp是一個保留關鍵字,但即使不用反引號逃脫,也可以使用它。

1
SELECT * FROM `data` WHERE `timestamp` = (SELECT MAX(`timestamp`) FROM `data`) 
+0

嗨,如果我這樣做它會運行1查詢或2查詢在服務器上?我試圖儘可能減少查詢次數。 – 2013-04-20 15:12:09

+0

它只會運行一個查詢。子查詢是查詢的一部分。 – 2013-04-20 15:13:09

0

如果你的目標是儘量減少服務器資源,一個查詢和兩個查詢之間的差別實在是很小。引擎需要做幾乎相同的工作。不同的是編譯兩個查詢而不是一個的輕微開銷。無論解決方案的

,你將在data(timestamp)建立索引減少服務器資源。

+0

我希望我能理解你的權利,我在數據庫中獲得了一個時間戳記,並保存了條目的時間戳記。這是你的嗎? – 2013-04-20 15:55:45

+0

@ Anton.P。 。 。是。所有建議的查詢將在該字段的索引上執行得更好。從服務器負載的角度來看,這比邏輯分爲一個或兩個查詢(儘管我認爲一個查詢更好)更重要。 – 2013-04-20 17:47:42

相關問題