source

FOUND_ROWS가 있는 SQL_CALC_FOUND_ROWS는 항상 1을 반환합니다.

factcode 2022. 11. 25. 20:49
반응형

FOUND_ROWS가 있는 SQL_CALC_FOUND_ROWS는 항상 1을 반환합니다.

select SQL_CALC_FOUND_ROWS, col1 , mytable.id from mytable group by col1;

select found_rows();

select found_rows() , col1  , mytable.id from mytable group by col1;

위의 쿼리는 검색된 행에 대해 항상 1이 됩니다.php 7.1과 maria db 10.1을 사용하고 있습니다.

제 백엔드는 5.5로 mysql에 DB::raw 요청을 하고 있습니다.서버 아파치 램프 서버.

버그인가요? 아니면 다른 방법이 있나요?

해결책 1:

mysql 버전을 확인해 주세요.이 오류는 5.6.*에 존재하며 5.6.11 릴리스로 해결되었습니다.이것을 실행하려면 , 서버의 버전이 [5.6.*< 5.6.11 ]와 다른 것을 확인합니다.

이것은 mariadb가 아닌 mysql에 게재된 버그입니다.http://bugs.mysql.com/bug.php?id=68458

mysql 버전을 확인한 경우 다음 설명을 확인하십시오.

메모: 버그 링크에 "5.6.11-log Source distribution"에서 컴파일된 MySQL 서버에 아직 이 오류가 있다고 기재되어 있습니다.


해결책 2:

found_rows() 및 동일한 쿼리의 limit은 총 카운트를 산출하지 않지만 제한이 있는 데이터에 대한 카운트를 제공합니다.선택 쿼리에 제한이 있는 경우 다음을 사용해야 합니다.

 "select SQL_CALC_FOUND_ROWS, ....... limit x;"

즉시 다음 실행

"select found_rows();"

또는

선택문에 제한이 없는 경우 직접 실행할 수 있습니다.

"select found_rows(), .......;"

설명: https://dev.mysql.com/doc/refman/5.7/en/information-functions.html#function_found-rows

예제 쿼리는 잘못된 것 같습니다. col1을 선택한 필드의 일부로 만들어야 합니다.

found_rows는 이전 쿼리에서 발견된 행 수를 반환합니다.첫 번째 문의 결과는 확인하셨나요?몇 개의 행을 반환합니까?1개 이상의 행을 반환하는 경우 - 쿼리와 같은 세션에서 found_rows()를 선택하는 사이에 쿼리가 실행되고 있음을 의미합니다.저는 이 문제를 재현하지 못했습니다만, 여기서 거래해 보세요.

다른 쪽에는 -

쿼리에서는 테이블에서 다른 카운트를 얻으려고 하는데 어떤 이유로 그룹을 사용하고 있는 것 같습니다.

사용해보셨습니까?

select count( disctinct col1) from mytable

이 방법으로 문제가 해결되지 않는 경우, 차선책은 다음과 같습니다.

select count(1) from (<your query goes here>)

언급URL : https://stackoverflow.com/questions/47407046/sql-calc-found-rows-with-found-rows-always-returns-1

반응형