프로젝트/G.O.A.T(여행 스케줄러)

여행게시판 검색추가, 페이징 문제 수정

찌서니 2022. 1. 19. 09:47
🔔 22월 01월 18일
✔ 검색 돌아가는지 체크
✔ 검색결과부분 리스트 다 나오는거 수정
✔ 페이징 다시 되는지 체크 (페이징은 되는데 버튼 안보임)
    (1-5까지했을때는 버튼X, 5페이지 넘어가면 버튼생김)
✔ 댓글 이슈 다시 물어보기
✔ 공지사항/trip 이슈 페이징 잡기
    (페이지가 1이 넘어가면 새로운글이 제일 끝페이지에 달림, 그리고 숫자 카운트도 안됨)

 

📌 검색결과에서 리스트가 다 뜨는거를 그냥 아예 없애버리고

내가 어떤 컬럼을 선택해서 '검색단어'를 검색했는지를 유지시켜놓는걸로

해결했다.

 

📌 검색은 돌아가는거 체크했는데 문제가

제목이랑 내용을 검색할때는 괜찮은데,

제목+내용을 검색하면 문제가 발생...!!

- 제목+내용에서 '제목' 단어로 찾으면 count가 문제인데, 1페이지에서 10개는 보여주고

-      "              '내용' 단어로 찾으면 count는 괜찮은데, 1페이지에서 8개만 보여줌

 

 

도대체 뭐가 문제냐고ㅜ 이거때문에 진짜 난리쳤는데

결국은 SQL문 문제였음ㅜㅜ

<select id="searchList" parameterType="trip" resultType="trip">
select b.*, m.* from 
    (select a.*, rowNum rn from
		(select * from trip
			<!-- keyword에 데이터가 있으면 <where>는 안에 문장이 있으면 where 없으면 공란 -->
			<where>
			del != 'y' 
				<if test="keyword!=null and keyword!=''">
					<if test="search=='subcon'">
						and t_title like '%'||#{keyword}||'%' or del != 'y' and t_content like '%'||#{keyword}||'%'
					</if>
					<if test="search!='subcon'">
						and ${search} like '%'||#{keyword}||'%'
					</if>
				</if>
			</where>
          order by t_num desc)a)b,
			member m where b.m_num = m.m_num and rn between #{startRow} and #{endRow}
				order by b.t_num desc
	</select>

 

where절 뒤에 del != 'y'가 문제였다.

처음 썼던 문장은 del != 'y' and t_title or t_content 이렇게 작성했는데,

- 그렇기 때문에 del != 'y'가 t_title에만 적용돼서, 제목에서 1페이지에서 10개는 보여줬지만,

getSearchTotal를 그냥 count(*)로 해서 숫자 문제가 발생한거 였다.

- t_content같은 경우에는 del != 'y'가 적용이 안돼서 삭제된거도 불러왔는데,

jsp에서 del != 'y' 인거만 보여줘라고 명시를 해서 나타난 문제였다.

 

<select id="getSearchTotal" parameterType="trip" resultType="integer">
		select count(*) from trip 
			<where>
				del != 'y' 
				<if test="keyword!=null and keyword!=''">
					<if test="search=='subcon'">
						and t_title like '%'||#{keyword}||'%' or del != 'y' and t_content like '%'||#{keyword}||'%'
					</if>
					<if test="search!='subcon'">
						and ${search} like '%'||#{keyword}||'%'
					</if>
				</if>
			</where>
		order by t_num desc
	</select>

숫자 카운트하는거도 똑같이 고쳐주고서야 해결됐다!

제목+내용 없는 컬럼을 사용해서 하려니까 진짜 어려웠다ㅜㅜ

 

 

 

+++혹시나 해서 페이징이 되는지 데이터를 임의로 많이 넣어서

확인했는데,,, 역시나,,, ? 갑자기 페이징이 난리가 났다ㅜ

근데 내가 고객문의/공지사항/여행게시판 이렇게 만들었는데

공지사항이랑 여행게시판만 페이징 문제가 발생했다!!!

( 1페이지가 넘어가면 최신글이 그 페이지에서 제일 밑에 보이고,

게시물이 몇개있는지 카운트도 안됨)

 

 

이 문제는 topN때문에 발생한 문제였다..

Oracle SQL Developer에서는 결과가 잘 보이길래 돌아가는거구나!

하고 썼던 문장이었는데 인터넷 검색해보니까 무작위 데이터 3개중에서

정렬된거를 보여준거래.. 하하

(WHERE과 ORDER BY를 같이 쓰면 WHERE가 먼저 순서이므로, 무작위 데이터3개 중 정렬된 데이터가 출력됨)

 

그래서 SQL문을 싹 고치고 컨트롤러에서도

// 답변글로 인한 번호를 보기좋게 다시 설정
int no = total - startRow + 1;
model.addAttribute("no", no);

이 부분 수정했다.

<select id="list" parameterType="cs" resultType="cs">
	select b.*, m.* from  
    	(select a.*, rowNum rn from  
        	(select * from cs order by cs_ref desc, cs_re_step)a)b,
           		member m where b.m_num=m.m_num and rn between #{startRow} and #{endRow}
</select>

topN은 어려우면 기본 틀을 가지고 변형하는게 쉽다고해서

그렇게 사용하고 있는데,,, 해도 어려운거 같다ㅜ

그래서 한번에 완성된 경우는 없고 몇번씩 sql문 실행시켜보고

원하는 결과값이 나오면 사용하고 있음

 

 

페이징 다시 하고, 검색 기능 끝냈는데 머리 터지는줄

진짜 쉽게 사용하는 기능이었는데 구현하려고 하니까 만만치 않다

내일은 좋아요 높은순으로 3개 띄우기!!!