sql 문 질문드립니다.

sql 문 질문드립니다.

QA

sql 문 질문드립니다.

본문

신고 게시판을 만들어서 테스트 중입니다.

기본적으로

report 테이블을 write_table 과 똑같이 만들어 두었구요.

신고하면

 

report 테이블에 해당 신고글이 insert 되는 방식입니다.

wr_n 칼럼을 말씀드리자면

wr_11 = 원게시판 이름

wr_12 = 게시판ID

wr_13 = 신고자ID

wr_14 = 신고자 닉네임

wr_15 = 신고횟수

wr_16 =

wr_17 =

wr_18 = 신고일

wr_19 = 신고자ip

wr_20 = 원글id

이렇게 들어가는데요.

누적 통계를 좀 보여주고 싶어서 쿼리를 작성하려고 하는데..

좀 어려움이 있어서 질문남깁니다.

 

wr_11(게시판이름)과 wr_20(원글id)가 같은것들의 count를 구하고 싶습니다.

아래 쿼리처럼 하면 다른건 다 원하는 결과가 나오는데

wr_15(신고횟수)를 어떻게 count 시켜줘야 할지 모르겠습니다..

ㅠㅠ 아래 쿼리처럼 하면

신고 횟수가 2회인 게시물은

1,2 이렇게 들어가고

3회인 게시물은

1,2,3 이렇게 들어가버립니다.

 

게시물 신고시,

이미 신고된 게시물이면

해당게시물의 wr_id와 게시판id를 report테이블에서 조회한후

wr_15에 + 1 시켜주기 때문에

누적테이블에서 1,2,3,... 이렇게 나오는것 같습니다..ㅠ

 


"SELECT *, 
            GROUP_CONCAT(DISTINCT ca_name ORDER BY ca_name) AS reason,
            GROUP_CONCAT(DISTINCT wr_15 ORDER BY wr_15) AS report_cnt
            FROM g5_write_report
            WHERE wr_is_comment = 0 
            GROUP BY wr_20, wr_11 
            ORDER BY wr_18 DESC";

이 질문에 댓글 쓰기 :

답변 2

안녕하세요. 인아이디어입니다.

 

해당 컬럼(wr_15)가 정수형으로 되어있는지 먼저 확인 후, php에서 (int)$변수명 + 1로 처리하시면 될것같습니다.

GROUP_CONCAT (DISTINCT wr_15 ORDER by wr_15)
이 구절이 잘못된거 아닌가요!?

위의 구절이 잘못되어서 report_cnt 가 1,2,3 이렇게 출력되는것 같아서요.



그냥
explode 로 쪼개서 배열로 만든후
배열에서 가장큰 수를 뽑았습니다~

GROUP_CONCAT이 잘못된게 맞습니다. 저 명령어는 문자열을 말그대로 문자열끼리 이어 붙이는게 맞습니다.(php의 implde와 비슷)
처음부터 단계별로 확인해보려고 제가 생각없이 쓴거네요

지적 감사합니다 : )

제가 제대로 안앍어본건 잘못된게 맞습니다 : )

>> GROUP_CONCAT에서 바로 중복된 row들의 count만 구해주려면

위의 말씀이 어떤 말씀인지를 잘 이해를 못하겠습니다 ''
GROUP_CONCAT 자체가 문자열을 이어주는건데, 이걸 카운트 한다는게 어떤 말씀이신지 모르겠습니다''

쉽게 생각을 하자면, 특정 글이 있고, 이걸 신고를 한다면, 게시판 테이블명, 게시물 번호, 신고누적횟수를 저장하시는게 맞나요 '' ?

이게 맞다면 굳이 똑같이 게시판형식이 아니라 다른 형식으로 해도 될듯합니다만 이미 진행을 하셨으니 제가 제대로 이해를 해야지 설명이 가능할 것같습니다 ''

쉽게 생각을 하자면, 특정 글이 있고, 이걸 신고를 한다면, 게시판 테이블명, 게시물 번호, 신고누적횟수를 저장하시는게 맞나요 '' ?

-- 네 맞습니다. 근데 신고누적횟수는
report(신고DB)테이블에 사용자가 신고한 게시물이 report 테이블에 존재하지 않는다면
1을 넣어주고
만약 존재한다면 2를 넣어줍니다. 2번째 신고라는 개념으로요.
게시판 형식으로 만든이유는
view도 필요하고
댓글도 같이 스샷같은 개념으로 저장하기 위해서 게시판형식으로 제작하였습니다.




GROUP_CONCAT에서 바로 중복된 row들의 count만 구해주려면
-- 신고횟수를 GROUP_CONCAT 문으로 제가 위에 써진 쿼리로 조회를 하게되면
2번 신고된 게시물은 1,2 가 나오고 (GROUP CONCAT 에서 자체처리)
3번 신고된 게시물은 1,2,3 이 나와버립니다.
제가 원하는 결과는 2번 신고된 게시물이면 2가 나오고
3번 신고된 게시물이면 3이 나왔으면 해서 count라는 말을 사용하게 됐습니다.

테이블이 없어서 그냥 생각상으로 만든겁니다 '';

g5_board_good 테이블이 그나마 비슷해서 비슷하게 만들어봤습니다 ''

 


SELECT *, 
    wr_11 AS 'bo_table',
    wr_20 AS 'wr_id',
    COUNT(wr_15) AS 'report_count'
FROM 
    g5_write_report
WHERE 
    wr_is_comment = 0 
GROUP BY 
    wr_11, wr_20
ORDER BY 
    wr_18 DESC;
답변을 작성하시기 전에 로그인 해주세요.
전체 59,301
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT