2013-03-14 124 views
0

我有一个场景。我的表格中有300条记录。我执行一个查询来获得总数。然后,因为我必须实现分页,所以我使用根据计数的限制从同一个表中选择数据。我在想如果我能在单个查询中获得计数和数据。 。在sql查询中节省时间

我尝试下面的代码:

Select * ,count(*) as cnt from table;

但是,这给我的总数却只有1个纪录!

有没有一种方法可以节省我在查询中耗尽的时间,并在单个查询中获得结果?

+0

如果您正在进行分页,使用应用程序代码(php,.net,coldfusion等)可能会使整个过程更加简单。 – 2013-03-14 14:05:01

+0

@DanBracuk - 应用程序代码无法在“LIMIT”数据集上获得全表计数。 – 2013-03-14 14:40:24

回答

4

类似:

select t1.*,t2.cnt 
from table t1 
cross join (select count(*) as cnt from table) t2 
limit 'your limit for the first page' 

select *,(select count(*) from table) as cnt 
from table 
limit 'your limit for the first page' 
+0

可以请你解释第一次回答一次。我没有那么多的知识 – PSR 2013-03-14 13:55:59

+0

我加入了它的计数表(一行一列的表)。我显示来自第二个表的所有内容和计数。 – 2013-03-14 13:58:13

+0

但是使用这个我将不得不每次都执行计数查询。不是吗? – 2013-03-15 05:32:57

0

使用两个查询可能不会像你想象的那样糟糕,你可以更多的信息,请阅读this

+0

'SQL_CALC_FOUND_ROWS'实际上比运行单独的COUNT()查询要慢。 – 2013-03-14 14:00:41

+0

这取决于索引,我会更新原始帖子。 – tonyjmnz 2013-03-14 14:13:14

0

你可以从你提到的数据结构中获得信息,但是确实没有理由这样做。当您执行两个查询时没有性能问题 - 一个用于获取行数,另一个用于数据选择。当您尝试选择一个查询中的所有信息时,您不保存任何内容。做两个简单的查询,它会是更好的解决方案 - 你会保持简单和清晰。