SQL 문제
에러발생 원인
question 이라는 테이블에 category라는 컬럼으로 ‘Q’일때는 A게시판에 보여지고 ‘R’일때는 B게시판에 데이터가 보여지게 설계를 했고 게시판에서 리스트 뽑아서 출력하는데 까지는 성공했다
<select id="admquestionList" resultType="com.sync.domain.Report">
select tbl_question.q_id, tbl_question.adm_id, tbl_question.m_id, ta.name, tbl_question.title, tbl_question.content, tbl_question.category, tbl_question.regDate, tbl_question.replyCount, tbl_question.mainImage
from tbl_question left join tbl_admin ta on tbl_question.adm_id = ta.adm_id where category = 'R'
<include refid="search"></include>
order by q_id desc
limit #{skip},#{size}
여기서 <include>된 코드는 검색을 하기 위한 검색조건 where 문이다
검색조건 코드
<sql id ="search">
<where>
<if test="keyword != null">
<foreach collection="types" item="item" separator="OR" open="(" close=")">
<if test='item =="t"'>
title like concat('%' , #{keyword} , '%')
</if>
<if test='item =="c"'>
content like concat('%' , #{keyword} , '%')
</if>
<if test='item =="w"'>
writer like concat('%' , #{keyword} , '%')
</if>
</foreach>
</if>
</where>
</sql>
현재 화면 <리스트까지는 뽑아오는데 성공했다>
하지만 여기서 문제는 검색이었다
검색을하면 where 문이 2번사용되기에 에러가 발생한다 이걸 어떻게 해결할까….검색조건 where문 안에 category 를 추가해서 해보기도하고 이방법 저방법 다 시도해 보았지만 전부 에러창을 보고 말았다 ….하지만 아 왠지 서브쿼리를 이용하면 될거같은데….. 도통 어떤식으로 작성해야하는지 감이 안와 다음날 강사님에게 가보아야겠다…라고 생각할때 같이 수업을 받던 사람들에게 물어 보았고 그러다 한가지 해결법을 찾았다 이방법 역시 서브쿼리였고 수정된 코드는 이러하다
<select id="admquestionList" resultType="com.sync.domain.Question">
select tbl_question.q_id, tbl_question.adm_id adm_id, tbl_question.m_id, ta.name, tbl_question.title title, tbl_question.content content, tbl_question.category, tbl_question.regDate, tbl_question.replyCount, tbl_question.mainImage
from (select * from tbl_question where category = 'Q') tbl_question left join tbl_admin ta on tbl_question.adm_id = ta.adm_id
<include refid="search"></include>
order by q_id desc
limit #{skip},#{size}
</select>
시원하게 해결을 했지만 혹 또다른 방법이 있을수있으니 내일 강사님에게 다시한번 가보려고한다 더 좋은 방법이 있다면 그방법도 소개해보겠습니다 !!!!
'에러' 카테고리의 다른 글
swagger-ui 에러 (0) | 2022.08.04 |
---|---|
Spring Boot 의 _ (언더바) 문제 (0) | 2022.06.15 |