offset+limit을 사용하여 mySQL 쿼리에서 총 결과 수 찾기
Codeigniter를 사용하여 페이지화 기능을 하고 있습니다만, 일반적으로는 PHP/mySQL 코딩에 해당한다고 생각합니다.
페이지당 원하는 결과 수에 따라 오프셋과 제한을 사용하여 디렉토리 목록을 검색하고 있습니다.그러나 필요한 총 페이지 수를 알기 위해서는 (총 결과 수)/(제한)을 알아야 합니다.지금은 SQL 쿼리를 두 번째 실행하고 필요한 행 수를 세어보고 LIMIT를 사용하지 않을 생각입니다만, 계산 자원을 낭비하고 있는 것 같습니다.
더 좋은 방법은 없을까?감사합니다!
편집: SQL 쿼리는 WHERE를 사용하여 특정 'category_id'를 가진 모든 행을 선택합니다.
SQL_CALC_FOUND_ROWS 보기
SELECT COUNT(*) FROM table_name WHERE column = 'value'는 그 조건에 일치하는 테이블의 총 레코드 수를 매우 빠르게 반환합니다.
데이터베이스SELECT통상, 조작은 「리소스적인」(리소스적인) 것이므로, 그것을 합리적으로 사용하는 것에 대해 크게 실망하지 말아 주세요.
편집: 추가됨WHEREOP가 그 기능이 필요하다고 언급한 후입니다.
SQL_CALC_FOUND_ROWS 쿼리 수식자 및 그에 부수되는 FOUND_ROWS() 함수는 MySQL 8.0.17 이후 폐지되며 향후 MySQL 버전에서 삭제될 예정입니다.대체 수단으로 LIMIT을 사용하여 쿼리를 실행하고 다음으로 COUNT(*)를 사용하여 LIMIT을 사용하지 않고 두 번째 쿼리를 실행하여 추가 행이 있는지 여부를 확인합니다.예를 들어 다음과 같은 쿼리 대신:
SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name WHERE id > 100 LIMIT 10;
SELECT FOUND_ROWS();
대신 다음 쿼리를 사용하십시오.
SELECT * FROM tbl_name WHERE id > 100 LIMIT 10;
SELECT COUNT(*) WHERE id > 100;
COUNT(*)는 특정 최적화의 영향을 받습니다.SQL_CALC_FOUND_ROWS로 인해 일부 최적화가 비활성화됩니다.
SQL_CALC_FOUND_ROWS에 호출이 필요한 것을 고려합니다.FOUND_ROWS()이후 제한에서 반환된 결과를 사용하여 두 번째 호출 없이 총 카운트를 가져오려면SELECT서브쿼리에서 도출된 JOIN 결과를 사용합니다.
SELECT * FROM `table` JOIN (SELECT COUNT(*) FROM `table` WHERE `category_id` = 9) t2 WHERE `category_id` = 9 LIMIT 50
주의: 파생된 각 테이블에는 고유한 별칭이 있어야 하므로 조인된 테이블의 이름을 지정해야 합니다.이 예에서는t2.
다음과 같이 두 개의 쿼리를 사용할 수 있습니다. 하나는 제한으로 데이터를 가져오는 것이고 다른 하나는 일치하는 총 행 수를 가져오는 것입니다.
예:
SELECT * FROM tbl_name WHERE id > 1000 LIMIT 10;
SELECT COUNT(*) FROM tbl_name WHERE id > 1000;
Mysql 가이드에서 설명한 바와 같이 이것이 가장 최적화된 방법입니다.또한 MySQL 8.0.17부터는 SQL_CALC_FOUND_ROWS 쿼리 수식자 및 FOUND_ROWS() 함수는 사용되지 않습니다.
2021년 최종 시점에서는 다음과 같습니다.
SELECT
t1.*,
COUNT(t1.*) OVER (PARTITION BY RowCounter) as TotalRecords
FROM (
SELECT a, b, c, 1 as RowCounter
FROM MyTable
) t1
LIMIT 120,10
동일한 값을 가진 모든 행을 표시하는 열이 있는 하위 쿼리를 사용하면 파티션 기준 창 함수의 그룹을 사용하여 결과 열의 동일한 값을 모두 셀 수 있습니다.
SELECT COUNT(id) FROM `table` WHERE `category_id` = 9
특정 범주의 행 수를 제공합니다.
언급URL : https://stackoverflow.com/questions/5928611/find-total-number-of-results-in-mysql-query-with-offsetlimit
'source' 카테고리의 다른 글
| size_t의 정의는 어디서 찾을 수 있습니까? (0) | 2023.01.25 |
|---|---|
| PHP PDO를 사용하여 도커와 함께 실행되는 로컬 MariaDB에 연결할 수 없습니다. (0) | 2023.01.25 |
| 고스트 이미지의 드래그 방지를 위한 CSS/JS (0) | 2023.01.25 |
| JavaScript에서 현재 날짜 및 시간 가져오기 (0) | 2023.01.15 |
| PHP에서 upload_max_filesize 변경 (0) | 2023.01.15 |