인프런 커뮤니티 질문&답변

mins199600님의 프로필 이미지

작성한 질문수

스프링 부트 웹 개발 입문 - 따라하며 배우기

주문내역 작업 (VO 객체사용)

검색기능이 안됩니다

작성

·

26

0

 코드를 맞게 쳤는데 메뉴 이름중 일부만 검색했을때 나오질 않네요

<!-- 검색에 의한 쿼리 -->
<select id="doSearch" resultType="hello.sailing.v2.vo.Order_list">
    SELECT no, coffee_no, coffee, price, cust_id, name,
    DATE_FORMAT(reg_day,'%Y.%m.%d') AS reg_day
    FROM order_list
    WHERE 1=1
    AND reg_day >= DATE_FORMAT( #{strStartDate},'%Y%m%d')
    AND reg_day &lt; DATE_ADD(DATE_FORMAT(#{strEndDate},'%Y%m%d'), INTERVAL +1 DAY)
    <if test="strCoffee != 'ALL'">
        AND coffee like CONCAT(#{strCoffee},'%')
    </if>
    <if test="strName != 'ALL'">
        AND name like CONCAT(#{strName},'%')
    </if>

답변 2

0

IT늦공 김부장님의 프로필 이미지
IT늦공 김부장
지식공유자

안녕하세요.

제가 어제부터 외부에 있습니다.

프로젝트 소스를 압축해서 보내주시면 집에 도착해서 확인하도록 하겠습니다.

이게 가장 확실 하더라구요.

good.dhkim@gmail.com

0

안녕하세요, 인프런 AI 인턴입니다. mins199600님.

검색기능의 이슈는 주로 SQL 쿼리의 조건절에서 발생할 수 있습니다. 현재 제공하신 쿼리에서 LIKE 절을 사용하시는데, 특정한 문자열 조합으로 인해 예상치 못한 결과가 도출될 수 있습니다. 다음은 몇 가지 확인해볼 점입니다:

  1. LIKE 조건 사용: 현재 CONCAT 함수를 사용하여 % 기호를 추가하고 있습니다. 이는 메모의 앞부분만 매칭하는 것입니다. 대체로 부분 문자열 검색을 위해서는 다음과 같이 % 기호를 앞뒤로 추가하는 것이 좋습니다:

    AND coffee like CONCAT('%', #{strCoffee}, '%')
    
  2. 입력 데이터 체크: #{strCoffee}#{strName}에 어떤 데이터가 들어오는지 정확히 확인해보세요. 만약 변수에 null이나 빈 문자열이 할당된다면 올바르게 쿼리가 동작하지 않을 수 있습니다.

  3. 데이터베이스 상태 확인: 테이블 order_list에서 coffeename 컬럼의 실제 데이터가 어떤 형식으로 저장되어 있는지 확인해 보세요. 대소문자나 공백 등의 이슈로 인해 검색이 제대로 되지 않을 수 있습니다.

  4. SQL 쿼리 테스트: 직접 데이터베이스 콘솔에서 입력 변수 값을 하드코딩하여 쿼리 결과를 테스트해 보는 것도 문제가 SQL 쪽에 있는지 확인하는 좋은 방법입니다.

유사한 주제로 발생하는 문제를 해결하는 예시는 다음과 같은 질문들에서 찾아볼 수 있습니다:

  1. 안녕하세요 Ajax강의 잘듣고있습니다. 다름이 아니라 Ajax로 검색할떄 시작일이나 종료일 고객명과 같은 검색조건을 어떻게 구현해야하는지 고민을해보다 질문드립니다.

추가적인 질문이 있으시면 망설이지 마시고 이어서 질문을 남겨주세요. 저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.

현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.