페이징을 수행하는 가장 자연스럽고 효율적인 방법은 LIMIT/OFFSET (Sybase의 TOP에서) 구조를 사용하는 것입니다. DB 독립적 인 방법은 실행중인 엔진을 알고 적절한 SQL 구문을 적용해야합니다.
적어도 이것이 DB 독립적 라이브러리의 코드에서 수행 된 방식입니다. 특정 쿼리를 사용하여 엔진에서 데이터를 가져 오면 페이징 로직을 추상화 할 수 있습니다.
하나의 SQL 문장 솔루션을 정말로 찾고 있다면 마음에 가지고있는 것을 보여줄 수 있습니까? temp 테이블 솔루션 용 SQL과 같습니다. 아마도 더 관련성 높은 제안을 얻을 수 있습니다.
편집 :
은 내가 임시 테이블 함께 할 수있는 방법을 볼 수 없습니다와 엔진 특정 구문을 사용할 수 있기 때문에 당신이 생각하고 있었는지 알고 싶었다. 이 예제에서 특정 구문을 사용했습니다. 필자는 여전히 (구현 된) 표준 SQL로 데이터베이스에서 페이징을 구현하는 방법을 보지 못합니다. 전체 테이블을 표준 SQL 및 응용 프로그램의 페이지로 가져올 수는 있지만 분명히 바보입니다.
이제 "LIMIT/OFFSET 또는 동급을 사용하지 않고 페이징을 구현하는 방법이 있습니까?" 나는 그 대답이 "Sanely, no"라고 생각한다. 당신은 커서를 사용하여 시도 할 수 있지만 당신은 데이터베이스 특정 문장/행동뿐만 아니라 먹이에 빠지게됩니다.
방금 나에게 발생한 wacko (바보 읽기) 아이디어는 create table test (ID int, name varchar, phone varchar, page int)와 같은 페이지 열을 추가 한 다음 페이지를 가져 오는 것입니다. 1 select * with page from page = 1 그러나 이는 해당 열을 유지 관리하는 코드를 추가해야한다는 것을 의미합니다. 다시 전체 데이터베이스를 가져 오거나 데이터베이스 특정 구문을 사용하여 수행 할 수 있습니다. 그것은 가능한 각각의 주문과 다른 많은 결점마다 다른 칼럼을 추가해야하는 것 외에도.
나는 증거를 제공 할 수는 없지만, 나는 정말로 당신이 단지 그것을 위생적으로 할 수 없다고 생각한다.
그래, 다른 해결책을 시도했지만 더 많거나 적은 휴대용 버전을 만드는 것은 불가능한 것 같습니다. – aku