데이터 자료 100건을 가져올때 정렬은 DBMS_RANDOM.VALUE 사용하여 랜덤하게 뽑습니다. 문제는 페이징처리할때 처음 랜덤하게 가져온 순서되로 페이징 처리가 가능할까요?? DBMS_RANDOM.VALUE를 사용하니 1페이지 2페이지 계속 랜덤하니 나왔던 자료가 또나오고 하는 문제점이 있어서요...
질문을 정확히 이해 한지 모르겠으나, 다음과 같은 것을 원하시는 것 같읍니다.
with test as ( select 'A' alphabet, 'apple' example from dual union select 'B' alphabet, 'boy' example from dual union select 'C' alphabet, 'cool' example from dual union select 'D' alphabet, 'dog' example from dual union select 'E' alphabet, 'elk' example from dual union select 'F' alphabet, 'fox' example from dual union select 'G' alphabet, 'girl' example from dual union select 'H' alphabet, 'hello' example from dual union select 'I' alphabet, 'ink' example from dual union select 'J' alphabet, 'jam' example from dual ) SELECT tb2.* FROM (SELECT tb1.*, ROWNUM r FROM (SELECT test.*, DMBS_RANDOM.VALUE val FROM test ORDER BY val ) tb1 ) tb2 WHERE tb2.r >= :시작row -- 시작 줄 (만약 한페이지가 5줄씩이면, 1, 6, 11 ...) AND ROWNUM <= :최대줄수; -- 한페이지당 줄 갯수
댓글 감사합니다.
제가 설명을 잘 못했네요..^^
생각해보니 안될꺼 같네요..ㅎㅎ
적어주신 쿼리는 질의 할때마다 램덤하잖아요..페이징을 생각해보시면 시작 ROW를 1,6,11이런식으로 하면
1페이지 나왔던 자료가 2페이지 3페이지에도 나올수가 있죠..이런문제점 때문에 질문 올렸습니다..^^
제가 원하는건 전체 100건의 데이타가 있다면
이걸 10개씩 총 10페이지에 걸쳐 보여줍니다. 하지만 랜덤하게 보여지는거죠..
쉽게 게시판을 생각할때 웹페이지 최초 로딩때(그러니깐 1페이지죠) 이때 질의에서 100건이 램덤하게 정렬된 상태겠죠..그중에서 1페이지(그러니깐 10개)의 데이터가 뿌려지구요
2페이지 클릭하면 다시 램덤하게 select하는게 아니라 1페이지에서 램덤하게 정렬된 그 데이터들중에서 2페이지에 해당되는 데이터를 보여주는것이든요..ㅎㅎ
그래야 1페이지에서 나왔던 자료가 2페이지...n페이지에서도 중복으로 나오질 않으니깐요..
생각해보니 이건 쿼리 영역이 아니고 프로그램 영역이 되겠네요...ㅎㅎ
동의합니다.