是否可以仅使用一个查询对Coldfusion中的页数进行分页和显示?
我的理解是,您显然可以使用一个查询来分页,但您需要一个额外的查询来创建页面。这是为了计算结果的总数。
(currentPage - 1) * resultsPerPage = Offset in MySQL查询。这个逻辑足以创建next/prev按钮。但是,为了知道页数,我们不需要使用单独的查询,然后查询数据的查询来知道结果的总数?
发布于 2010-07-30 01:14:22
是的,典型的基于mysql的方法需要两个查询:一个使用select count(*) from table,第二个使用select a, b, c from table limit x,y,其中x和y是根据当前页面和所需的偏移量构建的。
对于单个查询,您需要选择所有记录,这在大多数情况下效率较低。
发布于 2010-07-30 02:14:44
在MS SQL中,使用CTE:
接收参数@startRow和@endRow以及所需的参数
WITH qTemp AS (
select *
, count(*) as totCnt
, rowNum = ROW_NUMBER() OVER(ORDER BY myIndex ASC)
from myTable
where (my where clause)
)
SELECT * FROM qTemp
WHERE rowNum BETWEEN @startRow AND @endRow发布于 2010-07-30 01:17:35
我对MySQL不是很熟悉,但我知道在MySQL中,一个存储过程可以返回多个结果集。
如果您不能做到这一点,有您建议的两种方法,但第二种方法可以优化。
首先,运行两个查询。一个用于获取当前显示页面的数据,另一个用于获取结果集的总大小。如果数据频繁更改,或者如果通常不显示多个页面,我就会这么做。这需要两个db调用,但减少了返回的总大小。如果您不经常更改数据,但很少在每个查询中使用超过几个页面,那么您还可以缓存总结果计数。
第二种方法是在一个大型查询中返回所有结果,并且只显示相应的页面。这里不需要查询查询,因为使用cfloop和cfoutput的查询循环可以指定开始和结束查询行。如果您这样做,我将缓存查询。这将使用更多的内存,并且第一个页面加载速度会较慢,但是在后续页面上加载速度会更快。
https://stackoverflow.com/questions/3364942
复制相似问题