2009-04-21 4 views
-1

저는 Struts 2 프레임 워크를 사용하고 있습니다. 그러나이 질문은 Struts 2와 관련된 것이 아닙니다.꼬인 꼬임이 있습니다.

나는 내 웹 사이트에서 일종의 페이지 매김을하려고합니다. 페이지에 표시 할 레코드 목록이 있다고 가정 해 보겠습니다. 목록에는 150 개의 레코드가 있지만 각 페이지에 50을 표시하고자하므로이 경우 3 페이지가 표시됩니다. 물론 목록은 DB에서 가져옵니다.

쿼리가 7 초 이상 걸리면 이 누락되어 (요청하지 않음)이라는 제한 사항이 있습니다. 따라서 우리가 동시에 150 개의 레코드를 얻는다면 쿼리는 7 초 이상 걸립니다. 그래서 우리는 매번 50 레코드를 얻기로 결정했습니다. 그래서이 경우 우리는 DB에 3 번 (50 50 50) 갈 것입니다. 처음으로 총 (150)을 가져 오므로 DB로 돌아 가야하는 횟수를 알 수 있습니다.

여러분이 여러분이 이와 같은 것을 어떻게 처리 할 것인가에 대한 여러분의 생각을 나눌 수 있습니까? 저장 프로 시저 또는 쿼리를 조정하는 것이 최선의 방법이라고 말할 수도 있지만 SP와 쿼리가 많아 질수록 고통 스러울 것입니다.

나는 모든 예제를 부탁드립니다.

답변

0

페이징을 처리하는 방법에 대한 일반적인 팁을 찾고 계십니까? 쿼리를 작게 유지하기 위해 데이터베이스에서 필요한 레코드 만 가져와야한다고 생각하면 제대로 된 것입니다.

다른 RDBMS에는 레코드를 열거하고 페이징하는 다른 접근 방식이 있습니다. MySQL에는 LIMIT 키워드가 있으며 MS SQL Server 2005 이상에는 ROW_NUMBER() 함수가 있고 Oracle에는 ROWNUM 특수 열이 있습니다. RDBMS에 따라 이러한 기능을 사용하는 예제를 쉽게 찾을 수 있어야합니다.

1

처음으로 실제 가져 오기를 수행 할 필요는 없으며 수만 가져올 수 있습니다 (집계 함수 쿼리). 게시 된 라이브 페이지 목록은 특히 매우 큰 데이터 세트에서 일반적으로 발생합니다. 유일한 문제는 페이지 상태를 보장 할 수 없다는 것입니다. 레코드가 이전 페이지의 순서로 삽입되어 새 페이지에서 이전 레코드를 푸시 할 수 있습니다. 그 반대의 경우도 마찬가지입니다. 이 일반적으로 받아 들일 수 있지만. 당신이 기록의 제한된 수를 얻을 수 있도록 페이지 매김을위한

0

예 쿼리는 다음과 같습니다 - 여기

select * from records limit $start,50 

나는 원래 쿼리가 기록 SELECT * FROM 것을 가정 하였다. 원래 쿼리에 "limit $ start, 50"을 추가하십시오. 여기에 처음 50 레코드를 시작하려면 0을, 50-100 레코드를 가져 오려면 50을 시작하고 100-150 레코드는 100으로 시작해야합니다. "limit $ start, 50"를 any에 추가하면 쿼리의 경우 레코드 번호 $ start에서 시작하여 50 개의 레코드가 쿼리에 사용됩니다. 페이지 매김 문제를 해결할 수 있기를 바랍니다.

관련 문제