2024-04-09 - 마이페이지 나의게시글, 나의질문, 나의댓글 모아보기 리스트 구현

·2024년 4월 9일

프로젝트

목록 보기
46/57

[프로젝트 남은 TODOs]

  1. 검색창 에러
  2. 검색결과 없을 경우에 대한 처리
  3. 조건별 추천검색어에서 '카페'라는 단어가 포함되어있다면 파싱하여 제외시켜 검색시키기
  4. 제휴문의 (관리자에게 이메일보내기 기능) 구글폼 사용
  5. 사용자 위치기반 카페까지의 거리 표시
  6. 카페 찜버튼 ajax 처리 에러

  • 회원
    • 회원 비밀번호 찾기 (강사님꺼)
    • 로그인아이디 찾기 (강사님꺼)

완료

  • 카페 스크랩 (나의 찜) 목록 페이지
  • 카페 좋아요 (90%) (수정필요)
    - 사용자 위치기반 카페와의 거리 표시 (구현 x, 기능에서 제외)
    - 검색창
  • 메인페이지 하단
    - 추천카페, 인기카페, 신규카페
  • 필터 자잘한 오류 수정
  • 선택 필터 색상 css 처리
  • 마이페이지 (내가쓴글, 내가한 질문, 나의 댓글, 내가찜한카페 count 가져오기)
  • 마이페이지에서 나의 게시글, 나의 질문, 나의 댓글, 나의 찜 클릭시 목록 보기
  • 필터 다중조건 (다중선택)
  • 필터 전체선택 전체해제 버튼

나의 게시글 목록 불러오기

나의 게시글을 보여줄 jsp를 만들었고, boardId를 4번으로 지정하여 boardId 4번으로 호출 될 때 나의 게시글을 보여주려고 한 것이 원래 목표였다.

문제상황

그런데 boardId를 파라미터로 넘겨줘서 쿼리까지 잘 보냈지만 나의게시글의 게시판에 게시글은 0개로 보여지는 문제가 발생...

  • 애초에 나의 게시글들은 각자의 boardId가 지정되어있었고 (예, boardId=1 공지사항, boardId=2 자유게시판, boardId=3 질문게시판) boardId를 가지고 있던 글들을 boardId 4로 지정해준적도 없었고, 지정해서 가지고 오고싶으면마이바티스 if문을 사용해서 '몇번 boardId 글이라면 4번boardId로 가져와' 라는 식으로 쿼리를 짰어야 했었다.
  • 결론적으로 나는 회원별 나의 게시글은 boardId를 지정해주지 않기로하였고 boardId 호출하는 파라미터와 쿼리에서도 boardId는 제외시켜서 가지고 올 수 있었다.


회원1로 로그인을 했고 회원1이 쓴 게시글은 모두 보여진다!
같은 방식으로 나의질문, 나의댓글 모아보기 리스트를 구현했다.

나의 댓글 불러오기

문제상황

나의 댓글 불러오기 목록으로 들어가면, 내가 특정 게시글에 댓글을 2개를 적던 3개를 적던 100개를 적던, 게시글 제목 옆에는 댓글갯수가 1로만 표시되는 문제가 발생했다!
댓글 갯수를 불러오는 쿼리에서 잘못된 것 같았고..
내가 쓴 댓글의 원글이 중복으로 보여지는 문제를 해결하고자 DISTINCT를 사용한 것이 문제인걸까?

문제의 쿼리

			<script>
			SELECT DISTINCT A.*, M.nickname AS extra__writer, IFNULL(COUNT(R.id),0) AS extra__repliesCnt
			FROM `reply` AS R
			INNER JOIN `member` AS M
			ON R.memberId = M.id
			LEFT JOIN article AS A
			ON A.id = R.relId
			WHERE R.memberId = 2
			AND 1
			<if test="searchKeyword != ''">
				<choose>
					<when test="searchKeywordTypeCode == 'title'">
						AND A.title LIKE CONCAT('%',#{searchKeyword},'%')
					</when>
					<when test="searchKeywordTypeCode == 'body'">
						AND A.body LIKE CONCAT('%',#{searchKeyword},'%')
					</when>
					<otherwise>
						AND A.title LIKE CONCAT('%',#{searchKeyword},'%')
						OR A.body LIKE CONCAT('%',#{searchKeyword},'%')
					</otherwise>
				</choose>
			</if>
			GROUP BY R.id
			ORDER BY R.id DESC
			<if test="limitFrom >= 0 ">
				LIMIT #{limitFrom}, #{limitTake}
			</if>
			</script>

수정쿼리

쿼리 문제가 맞았고, DISTINCT를 사용할 필요도 없었다.
내가 그룹화하려는 기준을 잘못잡은 것이다. 나는 댓글의 id를 기준으로 그룹화를 했었고,
게시글의 id를 기준으로 그룹화를 했어야 이 문제가 해결되는 것!

			<script>
			SELECT A.*, M.nickname AS extra__writer, IFNULL(COUNT(R.id),0) AS extra__repliesCnt
			FROM `reply` AS R
			INNER JOIN `member` AS M
			ON R.memberId = M.id
			LEFT JOIN article AS A
			ON A.id = R.relId
			WHERE R.memberId = 2
			AND 1
			<if test="searchKeyword != ''">
				<choose>
					<when test="searchKeywordTypeCode == 'title'">
						AND A.title LIKE CONCAT('%',#{searchKeyword},'%')
					</when>
					<when test="searchKeywordTypeCode == 'body'">
						AND A.body LIKE CONCAT('%',#{searchKeyword},'%')
					</when>
					<otherwise>
						AND A.title LIKE CONCAT('%',#{searchKeyword},'%')
						OR A.body LIKE CONCAT('%',#{searchKeyword},'%')
					</otherwise>
				</choose>
			</if>
			GROUP BY A.id
			ORDER BY R.id DESC
			<if test="limitFrom >= 0 ">
				LIMIT #{limitFrom}, #{limitTake}
			</if>
			</script>

내가 쓴 댓글 수 만큼 보여지고, 원게시글 마다 내가 몇개의 댓글을 적었는지 게시글 제목 옆에 잘 표시가 된다!

profile
hello world

0개의 댓글