2012-10-11 94 views
0

我试图优化SQL请求的数量。 我发现,我已经使用了两次相同的请求这样的:有限制的结果数量总计

//a big select without limit 
$select="select * from tab1, tab2 ,tab 3 where (jointure..)"; 

// return to me 20 line 
$nbtotal=mysql_num_rows(mysql_query($select)); 
// I apply the limit for my paging system 5 per page 
$select.=" limit ".$offset.",".$limit; 

// all the information that i need to fetch 
$result_of_myrequest=mysql_query($select); 

我试过计数(article.id),但它返回给我一个很大的数字在每个算!

我可以结合在同一个请求(与限制0,5)$ nbtotal和我的请求的结果??

非常感谢!

+0

这取决于你想要什么。你想要结果的总数,不是吗?在知道之后,总共有多少结果,您从数据库中获得“少数选择”。正确?现在,我知道这不是'JS'的标签,但是如果你想要一个'低查询数分页',我会考虑使用它。 – ATaylor

+1

见已经回答了这个问题,其他: http://stackoverflow.com/questions/3453809/how-to-use-mysql-found-rows-in-php – Seth

回答

3

运行限值的查询将返回您的结果显示,那么你可以调用另一个查询:

SELECT FOUND_ROWS(); 

将从先前的查询返回的行的总数,而忽略了极限。

//a big select with limit 
$select="select * from tab1, tab2 ,tab 3 where (jointure..) limit ".$offset.",".$limit; 

// all the information that i need to fetch 
$result_of_myrequest=mysql_query($select); 

// return to me 20 line 
$nbtotal = mysql_query("SELECT FOUND_ROWS()"); 
+0

它为我工作,谢谢:) 我只是好奇这个查询(SELECT FOUND_ROWS()),你认为它运行相同的以前的查询或它捕获前一个结果或类似的VAR? (我只关心优化,我不知道这个查询是否比前一个更轻。) – ranell

+1

“SELECT FOUND_ROWS()”的性能可以忽略不计。 SQL旨在处理大量查询,大量查询和大量数据。这个查询比较小,所以没有什么可担心的。我们公司拥有多达100个表格,数百万条记录等数据库,而且我们的Web服务几乎可以立即为用户加载。为了回答这个问题,我并不确定,但我认为它缓存了LIMIT查询的结果,因为限制查询返回所有行,然后截断不必要的行,并且仅返回总行数。 – MatthewMcGovern