【问题标题】:Number total of result with limit有限制的结果总数
【发布时间】:2012-10-12 00:06:09
【问题描述】:

我正在尝试优化 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);

我试过 count(article.id) 但每次计数都会返回一个大数字!

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

非常感谢!

【问题讨论】:

  • 这取决于你想要什么。你想要结果的总数,不是吗?在您知道总共有多少个结果之后,您会从数据库中获得“选择少数”。正确的?现在,我知道这没有标记为“JS”,但如果您的目标是“低查询计数分页”,我会考虑使用它。
  • 查看已回答的其他问题:stackoverflow.com/questions/3453809/…

标签: php mysql sql optimization


【解决方案1】:

运行将返回您的结果显示的限制查询,然后您可以调用另一个查询:

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()");

【讨论】:

  • 它对我有用,谢谢 :) 我只是对这个查询(SELECT FOUND_ROWS())很好奇,你认为它运行的是相同的前一个查询还是它在前一个结果中捕获了一个 VAR或类似的东西? (我只是关心优化,不知道这个查询是否比上一个更轻量级。)
  • "SELECT FOUND_ROWS()" 的性能可以忽略不计。 SQL 旨在处理大型查询、大量查询和大量数据。相比之下,这个查询很小,所以没有什么可担心的。我们公司有多个数据库,包含多达 100 个表、数百万条记录等,我们的 Web 服务仍然几乎可以立即加载给用户。要回答这个问题,我不确定 100,但我认为它缓存了 LIMIT 查询的结果,因为限制查询返回所有行,然后截断不必要的行,并且只是返回总行数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-30
  • 2012-11-30
  • 2017-06-21
  • 1970-01-01
  • 1970-01-01
  • 2014-01-10
相关资源
最近更新 更多