목차 데이타를 나타내는데 테이블에는 id, pageNum, title 정보가
들어가 있습니다.
근데 한 문서에서 각각의 페이지별로 목차를 나타내는것이 아니라
소제목이나 큰제목이 들어간 곳에만 목차를 등록합니다.. 필요한 곳만
목차를 생성해서 문서에 링크를 거는거죠..
예를 들어 10 page짜리 문서라고 하면
목차는
id pageNum title
001, 1paeg , 차례
002, 2page , 1.공공질서
003, 8page , 2.정보공유
--> 이런식으로 만들어집니다.
문제는 검색엔진을 이용해 문서의 내용 검색으로 검색된 단어가
있는 각각의 페이지 정보를 가지고 결과값을 넘겨줍니다.
그럼 그 넘어온 pageNum값들을 가지고 목차를 생성해 내야하는데
검색엔진에서 넘겨준 pageNum값은 3,5,7,8,10 이렇게 문서안에 있는
각각의 페이지값 입니다.
현재 목차테이블에 있는 세개의 목차 데이타를 가지고 있기 때문에
3개의 목차로 검색결과를 나타내야 합니다.
따라서 검색엔진에서 넘겨준 3,5,7,8,10 값으로 각각페이지 값보다
작은 페이지중 가장큰값을 구해야합니다.
select max(pageNum) , id from category where pageNum <= 3
group by id;
근데 넘어온 모든 값들을 각각의 max값을 구해서 union을 하고 다시
중복되는 id값이 있기 때문에 group by 해야 하고 넘어오는 값이 몇개나
될지 알수 없기때문에 100page짜리에서 모든 페이지에 검색한 단어가 다
들어가있다면 union만 100번을 해야합니다...
이렇게 되면 쿼리 수행속도가 너무 느릴것같은데.. 이럴경우 어떻게
하는게 좋을까요..
select id, page from (
select max(pageNum) , id , 3 page from category where
pageNum <= 3 group by id
union
select max(pageNum) , id , 5 page from category where
pageNum <= 5 group by id
.
.
.
) group by id
|