검색 쿼리에 관한 질문 입니다
본문
이런 쿼리가 가능할지 모르겠는데
기본 게시판 검색을 하면
검색된 리스트 만 출력 됩니다
그런데 원하는건
검색된 게시물만 출력 되는게 아니라
검색된 게시물이 출력된 후
그 외 게시물이 출력 되는 ..
그러니까 .. 정리하자면
총 100개의 게시물이 있을때 김치라는 단어로 검색을 합니다.
김치 로 검색된 게시물이 총 10개라면
10개가 상위로 먼저 출력되고 그 이후 90개가
리스트로 출력..
이렇게 쿼리가 가능할까요??
답변 6
말그대로 그냥 전체 결과가 나오는데 검색어 일치값이 있을경우에 우선순위를 준다고 하면
order by 부분을 case when 검색어일치 then 1 else 2 형태로 가면 되지 않을까하는
막연한 생각입니다.. 다른 필드로는 많이 써봤습니다만..검색어로는 해본적이 없어서
실코딩이 될지는 모르겠네요...
https://im-first-rate.tistory.com/105
한번 참고 해 보세요
그러니까 .. 정리하자면
총 100개의 게시물이 있을때 김치라는 단어로 검색을 합니다.
김치 로 검색된 게시물은 10개가 상위로 먼저 출력되고 그 이후 90개가
리스트로 출력..
---------------------------
조금 말이안되는게
검색이라는게 그 단어를 검색하는것인데
김치를 검색하면 게시물이 10개가 있다면
10개만 검색이 되어야 맞는거 아닐까요?
10개는 김치가 나오고 아래쪽은 다른 게시물이 나와야한다는건 좀 이상하네요.
쿼리가 한방에 될지는 잘 모르겠고
원하는데로 구현만 억지로한다면
검색어가 포함된 쿼리
검색어를 제외한 쿼리 2개 날려서 뿌리면 되겠네요
쿼리 날릴때 검색어 일치시에는 0 아닐때는 1 로 해서 필드를 추가, 예들 들어 order_seq?
그런다음 order by order_seq, 원래 정렬 조건
정도로 하면 되겠네요
검색을 해서 나온 값의 no가 1, 3, 5, 10이라고 가정을 합니다.
전체 쿼리문에 ORDER BY만 저렇게 넣으면 되지 않을까 싶습니다. 쿼리를 두 번 날려야 하는 번거로움이 있겠지만요.
SELECT * FROM 테이블 ORDER BY FIELD(`no`, 1, 3, 5, 10), 이후 원래 조건
이런 식으로 하면 되지 않을까 싶습니다.
검색엔진을 사용하시면 처리 가능합니다.
매칭된 단어수에 따라서 점수를 계산하고, 해당 점수로 order by 를 하시면 됩니다.
MySQL 과 같은 dbms에서는 서브쿼리를 사용해야 하는데, 이경우 게시글수가 많은 경우 속도저하와 서버부하가 심하게 됩니다. 검색엔진은 이런 기능을 내장하고 있음으로 속도나 성능에 영향을 주지 않으면서 처리가 가능합니다.
그런데 굳이 만들 필요가 있나요? 현재 기술로는 안된다고 하시는게..