我想实现自己的Zend_Paginator_Adapter
,所以我实施了Zend_Paginator_Adapter_Interface
(docs)。我现在正在实施count()
。我是对的,如果我的查询是
SELECT * FROM Posts LIMIT ... // where limit is for pagination purposes
我需要获取表格中的总行数(在count()
中返回)?
SELECT COUNT(*) FROM Posts
有两个查询似乎不可避免?我并不太关心我目前的关于性能的项目,但需要2个查询,只是让我想到,所以我想问这里
答案 0 :(得分:3)
我是否可以说...获取表格中的总行数(以count()返回)?
SELECT COUNT(*)FROM Posts
这肯定是获得所需结果的一种方法。假设您的表/索引已经优化,运行第二个查询并不是那么糟糕。
还有另一种选择。您可以在原始查询中包含语句“SQL_CALC_FOUND_ROWS”,然后您的第二个查询将仅包含:
“SELECT FOUND_ROWS();”
有关此功能的更多信息,请参阅以下链接: http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_found-rows
当然,这假设您使用的是MySQL。
我不太关心我目前关于性能的项目,但是需要2个查询,只是让我想到......
这肯定是一个有效的问题,特别是随着记录数量的增加。 Zend_Paginator令人敬畏的是你能做到的事实 注入一个Zend_Cache_Core实例。这将确保您只根据您的时间长度运行这些查询的次数最少 缓存生命周期是。
有关缓存功能的详细信息,请参阅以下页面: http://framework.zend.com/manual/en/zend.paginator.advanced.html#zend.paginator.advanced.caching