쿼리 질문 하나 더 드리겠습니다...
본문
신고 게시판을 만들어 테스트 중입니다.
로직은
1. 각 게시판 view 에 있는 신고 버튼을 누른다
2. 사유를 선택한다.
3. 신고한다.
4. 신고된 게시물을 g5_write_report 테이블로 복사한다.
5. 회원당 같은 게시물을 두번 신고할 수는 없다.
6. g5_write_report 에 이전에 같은 게시물이 신고됐다면 그 게시물의 wr_15필드값을 구해서
지금 신고된 게시물의 wr_15 필드에 +1을 해준다.
7. 관리자 페이지(g5_write_report 아님)에 게시물의 신고횟수를 보여준다.
1~6번 까지는 모두 해결했는데요
7번이 지금 좀 문제인게.
같은 게시물이 여러번 신고되고 또 신고사유가 달라지면
즉, g5_write_report 에는 여러번 쌓입니다. 이 쌓이는 데이터로
게시물들의 신고수를 구하려고 하는데요.
$sql = "SELECT *, GROUP_CONCAT(DISTINCT ca_name ORDER BY ca_name) AS reason FROM g5_write_report WHERE wr_is_comment = 0 GROUP BY wr_parent, wr_20 ORDER BY wr_15 DESC, wr_18 DESC";
ca_name <- 신고사유
wr_20 <- 신고게시물이 있는 게시판
wr_15 <- 신고횟수
이렇게 쿼리를 날려서 보내면..
2번 신고된 게시물이면 wr_15 필드값이 2가 들어와야 하는데
위의 쿼리로 조회했을때는 wr_15 필드 값이 1이 됩니다;
2번 신고된 게시물인데...첫번째 신고된 게시물을 가져와 버립니다;;
마지막에 신고된 게시물을 가져오려면 서브쿼리를 써야할까요 아니면..
조건절을 추가해야 하나요!?
GROUP BY 에 wr_15를 추가하게 되면
g5_write_report에 신고된 게시물이 모두 출력됩니다.
전 가장 최근에 신고된 게시물만 가져오고 싶습니다.......ㅠ
!-->
답변 2
count를 빼먹으셨네요^^
wr_15에 신고 횟수를 어떻게 넣어주시는 지는 모르겠지만...
group by 하시면 중복된 행은 제거됩니다.
하지만 wr_15같은 경우에는 행의 wr_15컬럼에 값이 들어가있겠죠?
만약에 같은 게시물에 2번 신고내용이 접수되었다면 두개의 신고 내용이 기록된 행의 wr_15에 모두 +1씩 해줘야 합니다.
우선 제 생각에는 저런식의 로직 보다는,
신고 갯수 wr_15컬럼을 배제하시고,
$sql = "SELECT *, GROUP_CONCAT(DISTINCT ca_name ORDER BY ca_name) AS reason, count(wr_parent) as report_cnt FROM g5_write_report WHERE wr_is_comment = 0 GROUP BY wr_parent, wr_20 ORDER BY wr_15 DESC, wr_18 DESC";
위의 소스와 같이 count(wr_parent) as report_cnt구문을 삽입하여 신고된 횟수를 구하는 것이 정확할 것으로 생각됩니다.^^
이렇게 하시면 1~6번 로직들을 수정하지 않으시고도 해당게시물의 신고횟수를 실시간으로 조회하실 수 있을 것입니다.
!-->제일 간단하게 설명드리겠습니다.
1. 각 게시판 view 에 있는 신고 버튼을 누른다
2. 사유를 선택한다.
3. 신고한다.
4. 신고된 게시물을 g5_write_report 테이블로 복사한다.
--------------------------------- 1~4번까지는 기존과 동일합니다.
5. 회원당 같은 게시물을 두번 신고할 수는 없다.
-> 신고가 됬다면 사유, 게시글번호, 게시판이름, 신고한 회원아이디를 새로운 테이블에 insert합니다.
그러면 추가 신고를 하려고 하면 새로운 테이블에 게시글,게시판이름,회원아이디를 검색해서 존재하면 신고 버튼을 보이지 않게 처리하면 됩니다.
6. g5_write_report 에 이전에 같은 게시물이 신고됐다면 그 게시물의 wr_15필드값을 구해서
지금 신고된 게시물의 wr_15 필드에 +1을 해준다.
->이전의 신고된 wr_15필드의 값을 구할 필요없습니다. 그냥 신고가 되고 새로운 테이블에 신고 내역이insert되면 같은 게시물에 wr_15필드 + 1로 업데이트합니다.
7. 관리자 페이지(g5_write_report 아님)에 게시물의 신고횟수를 보여준다.
->관리자 페이지에 메뉴를 하나 만들어서 우선 전체 게시물을 가져옵니다.
예를들어 현재 제가 사용중인 화면을 캡쳐했습니다.
우측에 표시해둔 부분에 현재 게시물의 신고 개수를 출력해줍니다.
방법은 간단합니다.
select count(*) as cnt from 새로운테이블명 where wr_id='게시물번호' and bo_table = '게시판명' 으로
해당 게시물의 신고 개수를 가져오면됩니다.
그러면 같은 게시물번호, 게시판명에 작성된 모든 row의 개수가 계산되므로 전체 개수를 출력하면되고
신고내역 로그가 새로운 테이블에 매번 쌓이기 때문에 신고내역 페이지도 구현이 가능합니다.