Part 15. 검색 처리

  • 게시물 관리에서 마지막은 다양한 검색처리다.
  • 검색 기능은 다시 검색 조건과 키워드로 나누어 생각해 볼 수 있다.
  • 검색 조건은 일반적으로 < select > 태그를 이용해서 작성하거나 < checkbox>를 이용하는 경우가 많다.
  • 과거에는 < checkbox >를 이용하는 경우가 더 많았지만, 최근에는 일반 웹 사이트에서 일반 사용자들의 경우에는 < select >를 관리자용이나 검색 기능이 강한 경우 < checkbox >를 이용하는 형태가 대부분이다.
  • 예제는 흔한 < select > 태그를 이용해 검색 기능과 화면을 처리한다.

15.1 검색 기능과 SQL

  • 게시물의 검색 기능은 다음과 같이 분류가 가능하다.
    • 제목/내용/작성자와 같이 단일 항목 검색
    • 제목 or 내용, 제목 or 작성자, 내용 or 작성자, 제목 or 내용 or 작성자와 같은 다중 항목 검색
  • 검색 항목은 제목/내용/작성자와 같은 단일 항목 검색과 제목 or 내용과 같이 복합적인 항목으로 검색하는 방식이 존재한다.
  • 게시물의 검색이 붙으면 가장 신경 쓰이는 부분은 역시 SQL 쪽이다.
  • 오라클은 페이징 처리에 인라인뷰를 이용하기 때문에 실제로 검색 조건에 대한 처리는 인라인뷰의 내부에서 이루어져야 한다.
  • 단일 항목의 검색은 검색 조건에 따라서 칼럼이 달라지고, LIKE 처리를 통해 키워드를 사용하게 된다.
  • 만일 2페이지에 해당하는 데이터를 '제목'으로 검색하고, 키워드는 'Test'라고 한다면 다음과 같이 작성될 수 있다.
  • 단일 항목은 인라인뷰 안쪽에 필요한 데이터를 가져올 때 검색 조건이 적용되어야 하기 때문에 WHERE문 뒤에 검색 조건이 추가되고, ROWNUM 조건이 뒤따르게 하면 문제가 없다.

15.1.1 다중 항목 검색

  • 문제는 2개 이상의 조건이 붙는 다중 항목의 검색이다.
  • 예를 들어, 제목(title)이나 내용(content) 중에 'TEST'라는 문자열이 있는 게시물들을 검색하고 싶다면 다음과 같이 작성될 것이다.
-- 예상과 다르게 동작하는 SQL
select
*
from
	(
  	 select /*+INDEX_DESC(tbl_board pk_board) */
     	rownum rn, bno, title, content, writer, regdate, updatedate
     from
     	tbl_board
     where
     	title like '%Test%' or content like '%Test%'
        and rownum <= 20
    )
where rn > 10;
  • 'title like '%Test%'or content like '%Test%' 구문 자체는 이상이 없지만, 실제로 동작 시켜 보면 10개의 데이터가 아니라 많은 양의 데이터가 나온다.
  • 많은 양의 데이터가 나온 이유는 위 SQL문에서 AND 연산자가 OR 연산자 보다 우선 순위가 높기 때문에 'ROWNUM이 20보다 작거나 같으면서(AND) 내용에 'Test'라는 문자열이 있거나(OR) 제목에 'Test'라는 문자열이 있는' 게시물들을 검색하게 된다.
  • 제목에 'TEST'라는 문자열이 있는 경우는 많기 때문에 많은 양의 데이터를 가지고 온다.
  • AND와 OR가 섞여있는 SQL을 작성할 때에는 우선 순위 연산자인 '()'를 이용해 OR 조건들을 처리해야 한다.
  • 결과를 보면 원하는 10개의 데이터만 출력되는 것을 볼 수 있다.
profile
한 걸음 한 걸음 나아가는 개발자

0개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN