Mariadb: OFFSET 및 LIMIT를 사용하는 페이지가 한 행을 건너뜁니다.
MariaDB 테이블이 있습니다.
id, 이름
id 열에는 Primary, auto_increment, unique 속성이 있습니다.
테이블에는 40,000개의 행이 있습니다.
저는 이 PHP와 MariaDB를 사용하여 이 테이블에서 행을 로드하고 있습니다.다음은 PHP 코드입니다.
$get_rows = $conn->prepare("SELECT * FROM my_table where id> 0 ORDER BY id ASC LIMIT 30 OFFSET ?");
$get_rows->bind_param('i', $offset);
//etc.
처음에는 쿼리가 모든 것을 올바르게 반환했지만, 다음 쿼리(AJAX를 통해 작성)에서는 현재 결과와 다음 결과 사이에 한 행 간격이 있는 다음 30개 행을 받았습니다.그리고 이것은 계속됩니다.
표에서 #1 행이 삭제되었습니다.그래서 복원을 했는데 이제 쿼리가 작동합니다.하지만 앞으로 더 많은 행을 삭제해야 합니다. (소프트 삭제 옵션이 없습니다.)행을 계속 삭제하고 해당 쿼리가 올바른 결과를 반환하도록(행을 건너뛰지 않고) 할 수 있는 방법이 있습니까?
편집
다음은 처음 2개의 쿼리에 있는 ID 범위의 예입니다.
쿼리 1:
247--276
질문 2:
278--307
(277 누락)
NB 채팅GPT에 문의했지만 도움이 되지 않았습니다 :)
LIMIT 및 OFFSET 행을 값이 아닌 위치별로 쿼리합니다.따라서 첫 번째 "페이지"에서 행을 삭제한 경우, 이후의 모든 행의 위치가 하나씩 아래로 이동합니다.
행을 놓치지 않도록 하는 한 가지 솔루션은 페이지를 최대로 정의하는 것입니다.id
값은 오프셋 대신 앞 페이지의 값은 오프셋으로 표시되지 않습니다.
$get_rows = $conn->prepare("
SELECT * FROM my_table where id> ?
ORDER BY id ASC LIMIT 30");
$get_rows->bind_param('i', $lastId);
이전 쿼리가 이전 페이지를 본 경우에만 작동하므로 해당 페이지의 마지막 ID 값을 저장할 수 있습니다.
언급URL : https://stackoverflow.com/questions/75501058/mariadb-pagination-using-offset-and-limit-is-skipping-one-row
'source' 카테고리의 다른 글
SQLAlchemy ORM을 Panda DataFrame으로 변환 (0) | 2023.06.28 |
---|---|
C#에서 저장 프로시저를 큰 CLOB로 호출하는 문제 발생 (0) | 2023.06.28 |
2개의 열을 기준으로 SQL 고유 제약 조건을 만들려면 어떻게 해야 합니까? (0) | 2023.06.23 |
WiX에서 Oracle ODP.Net에 대한 레지스트리 키(값이 아님)가 있는지 테스트하려면 어떻게 해야 합니까? (0) | 2023.06.23 |
cx_Oracle:각 행을 사전으로 받으려면 어떻게 해야 합니까? (0) | 2023.06.23 |