2012-02-18 7 views
1

간단한 MySQL 쿼리를 수행하여 LIMIT 절의 영향을받지 않고 쿼리가 반환하는 행 수를 계산합니다. Codeigniter PHP 프레임 워크에서 액티브 레코드를 사용하고 있습니다.SQL_CALC_FOUND_ROWS()를 사용할 때의 오류

문제점 :SQL_CALC_FOUND_ROWS을 사용하면 오류가 발생합니다. 이게 왜 그렇게?

쿼리

SELECT `listing_id`, SQL_CALC_FOUND_ROWS listing_id FROM (`listings`) LIMIT 100 

오류

당신은 당신의 SQL 구문에 오류가 있습니다; 올바른 구문은 라인에서 1 개

CodeIgniter의 활동 기록

$this->db->select('listing_id') 
      ->select('SQL_CALC_FOUND_ROWS listing_id', FALSE) 
      ->from('listings') 
      ->where('price < 1000') 
      ->limit($limit, $offset) 
      ->order_by('listing_id', 'desc'); 

답변

0
를 '100 ( listings)로부터 SQL_CALC_FOUND_ROWS 목록 ID LIMIT' 근처를 사용하는 는 MySQL 서버 버전에 해당하는 설명서를 확인

MySql의 count() 함수를 사용하면 원하는 것을 얻을 수 있습니다.

SELECT `listing_id`, count(*) FROM (`listings`) LIMIT 100 
+1

+1 나를 가르치기위한 새로운 :) –

+0

GROUP BY 문도 필요하지 않습니까? – stef

+0

SQL_CALC_FOUND_ROWS가 LIMIT을 무시하기 때문에 다른 결과가 나올 수 있습니다. – Goose

2

SQL_CALC_FOUND_ROWS은 행의 수는 LIMIT 절이이 사용하여 나중에 검색 할 수 있도록 account-이 저장 될 피하지 어디 나타 내기 위해 단순히 수정의, 값을 반환하지 않습니다 두 번째 쿼리 (완전한 결과 집합을 두 번 생성하지 않음). 그것을 DISTINCT 키워드와 동일하게 생각하십시오.

자세한 내용은 documentation을 읽어보십시오.

관련 문제