개발환경 : Spring Framework, Mybatis, MySql, Java, Jsp
사용 툴 : STS, MySQL Workbench 6.1 CE
- ※저 스스로 로직과 테이블, jsp를 배우면서 짜가며 만들었기 때문에 비효율적인 면이나 실제 로직과 다른면이 충분히 있을 수 있습니다. 많은 지적 바랍니다.
- 댓글 구현의 어려움 -> 댓글의 댓글 구현하기
- 이를 해결하기 위해서 grp, grp_num을 이용하여 덧글마다의 그룹을 만들어 댓글의 댓글은 그룹으로 묶어서 정렬함
- order by grp asc ,grp_num asc를 하여 grp을 1순위, grp_num을 2순위로 정렬하여 select한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| CREATE TABLE `comment_board` (
`num` int(20) unsigned NOT NULL,
`grp` int(20) unsigned NOT NULL,
`grp_num` int(10) unsigned NOT NULL DEFAULT '0',
`depth` int(10) unsigned NOT NULL DEFAULT '0',
`content` varchar(500) NOT NULL,
`id` varchar(20) NOT NULL,
`date` datetime NOT NULL,
`good` int(10) unsigned NOT NULL DEFAULT '0',
`bad` int(10) unsigned NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
//호출 쿼리
select * from comment_board where num = #{num} order by cb_grp asc ,cb_grp_num asc;
|
- num, grp, grp_num, depth는 controller에서 값을 가져온다.
- 삽입 - 댓글일때
- grp을 증가시킨다. grp_num은 1으로 둔다. depth는 0으로 둔다.
- ifnull을 사용하여 해당글에 처음 쓰는 댓글이라면 자동으로 grp값을 1로 주도록 하였다.
1
| insert into comment_board select #{num}, ifnull(max(grp)+1,1) grp, 1,0, #{content}, #{id}, now(), 0,0 from comment_board where num = #{num};
|
- 삽입 - 댓글의 댓글일때
- 해당 grp의 grp_num의 넣을 위치보다 큰 grp_num을 모두 1씩 증가시킨다.
- depth를 증가시킨후 해당 grp_num에 넣는다,
1
2
3
4 | //해당 게시물(num)의 grp의 grp_num의 넣을 위치보다 큰 grp_num을 모두 1씩 증가시킨다.
update comment_board set grp_num=grp_num+1 where num = #{num} and grp = #{grp} and grp_num > #{grp_num};
//depth를 증가시킨후 해당 num,grp,grp_num에 넣는다,
insert into comment_board(#{num},#{grp}, #{cb_grp_num} ,#{depth}+1, #{content}, #{id}, now(), 0,0);
|
2
답글삭제ㄴ
답글삭제우왕굿ㄷ
답글삭제c
답글삭제14124
답글삭제ㅋㅋㅋㅋㅋㅋㅋ
답글삭제DSA
답글삭제ADDDS
답글삭제