2013-04-20 98 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

相关问题