안녕하세요. sql을 공부하고있는 초보 개발자입니다.
간단하게 다중 검색어를 통한 결과를 표현하는 페이지를 구현했습니다.
여기서 검색어 정확도별 정렬을 하고싶습니다.
검색어 일치 갯수가 많은 순으로 정렬하고싶습니다.
힌트 좀 부탁드립니다!
select book_no as no, book_title as title, book_publisher as publisher, book_price as price, book_rent_count as rentCount, book_status as status, create_date as createDate from bookstore_book <iterate prepend="where" open="(" close=")" property="keywordList" conjunction="or" > book_title like '%' || #keywordList[]# || '%' </iterate>
WITH T AS ( SELECT '호부호형 홍길동 한글소설' TEXT FROM DUAL UNION ALL SELECT '홍길동 활빈당 호부호형 한글소설' TEXT FROM DUAL UNION ALL SELECT '신사임당' TEXT FROM DUAL UNION ALL SELECT '한글소설 홍길동' TEXT FROM DUAL ) SELECT TEXT , REGEXP_COUNT(TEXT, '(홍길동|활빈당|호부호형|한글소설)') MATCH_CNT FROM T WHERE TEXT LIKE '%홍길동%' OR TEXT LIKE '%활빈당%' OR TEXT LIKE '%호부호형%' OR TEXT LIKE '%한글소설%' -- WHERE REGEXP_COUNT(TEXT, '(홍길동|활빈당|호부호형|한글소설)') >= 1 -- 이렇게도 수정가능 ORDER BY REGEXP_COUNT(TEXT, '(홍길동|활빈당|호부호형|한글소설)') DESC -- 다이나믹 쿼리를 이용해 이 부분만 추가