我有以下代码
$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)并获得整个查询?
感谢。
答案 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)
最有效的方法是在这种情况下运行两个查询。