计算mysql查询

时间:2009-06-15 20:40:44

标签: php mysql zend-framework count

我有以下代码


$result = $handle->select()->from('store_products_id', array('count'=>'COUNT(store_products_id.product_id)'))
                                       ->where('store_products_id.store_id=?', $this->store_id)
                                       ->columns($selectColumns)
                                       ->join('product_quickinfo', 'store_products_id.product_id = 
                                              product_quickinfo.product_id')

                                       ->join('image_paths', 'product_quickinfo.image_id = 
                                              image_paths.image_id')

                                       ->order('product_quickinfo.date_created DESC')
                                       ->limitPage($this->page_number, $this->sum_each_page)
                                       ->query(ZEND_DB::FETCH_OBJ);

但是,我只回到一个结果..这里看一下print_r:


Array ( [0] => stdClass Object ( [count] => 14 [small_path] => 1 [product_name] => v evrecvrv [price] => 22 [product_id] => 1 [image_id] => 1 [date_created] => 0000-00-00 00:00:00 [large_path] => [description] => ) )

当我删除COUNT控制器时,我将所有项目都恢复。 我怎样才能统计整个查询(超出我所施加的LIMIT)并获得整个查询?

感谢。

2 个答案:

答案 0 :(得分:4)

从MySQL 4.0.0开始,您可以在查询中使用SQL_CALC_FOUND_ROWS,这将告诉MySQL计算忽略LIMIT子句的总行数。您仍然需要执行第二个查询才能检索行计数,但这只是一个简单的查询,它只检索存储的行数。

用法非常简单。在主查询中,您需要在SELECT之后添加SQL_CALC_FOUND_ROWS选项,在第二个查询中,您需要使用FOUND_ROWS()函数来获取总行数。查询看起来像这样:

SELECT SQL_CALC_FOUND_ROWS name, email 
FROM users 
WHERE name LIKE 'a%' 
LIMIT 10;

SELECT FOUND_ROWS();

唯一的限制是必须在第一个查询之后立即调用第二个查询,因为SQL_CALC_FOUND_ROWS不会在任何地方保存行数。

(从this post复制)

答案 1 :(得分:1)

最有效的方法是在这种情况下运行两个查询。