2009-06-15 8 views
0

나는계수 MySQL의 쿼리


$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 컨트롤러를 제거

, I 모든 항목을 다시 가져 오십시오. 어떻게 전체 쿼리를 계산할 수 있습니까? (부과하는 LIMIT 이상) 또한 전체 쿼리를 다시 가져올 수 있습니까?

감사합니다.

+0

FWIW,이 문제는 젠드 프레임 워크에 특정하지 않습니다. SQL 쿼리에서 집계 함수를 사용하는 데 문제가 있습니다. 단일 쿼리에서는 집계 데이터 또는 사전 집계 데이터 행을 가져올 수 있지만 둘 다 가져올 수는 없습니다. –

+0

이것은 [다른 질문]과 유사합니다 (http://stackoverflow.com/questions/983419/is-there-a-way-to-get-the-number-of-records-from-a-query-with- 젠드 프레임 워크/984283 # 984283). – Justin

답변

1

가장 효율적인 방법은이 경우 두 개의 쿼리를 실행하는 것입니다.

4

MySQL 4.0.0부터 쿼리에 SQL_CALC_FOUND_ROWS를 사용하면 MySQL에 LIMIT 절을 무시한 총 행 수를 계산할 수 있습니다. 행 수를 검색하기 위해 두 번째 쿼리를 실행해야하지만 저장된 행 수만 검색하는 간단한 쿼리입니다.

사용법이 매우 간단합니다. 당신은 기본 쿼리에서 SQL_CALC_FOUND_ROWS 옵션을 SELECT 뒤에 추가해야하고 두 번째 쿼리에서는 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에서 복사)

+0

흥미로운 기사, 나는 SQL_CALC_FOUND_ROWS에 대해 몰랐다. 인용 된 기사의 의견은 전체 행 집합이 여전히 계산되므로 (즉, LIMIT 최적화 없음) 큰 쿼리가 아닌 FOUND_ROWS()를 다시 호출하는 것이 더 낫지 만 더 이상 수행하지 않는다고 제안합니다. –