0

我有以下代码


$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 控制器时,我会取回所有项目。我怎样才能既计算整个查询(超出我强加的限制)又取回整个查询?

谢谢。

4

2 回答 2

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 不会在任何地方保存行数。

(从这个帖子复制)

于 2009-06-15T21:22:42.513 回答
1

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

于 2009-06-15T21:03:57.833 回答