채택완료

게시판 DB에서

2019-09-30 (월) 23:14:30 2,698

wr_num이 있는데 이것의 사용법이 어떻게 되나요?(ciboard에서는 post_num)

번호는 -1, -2, -3으로 되는데..

게시글 정렬을 위한 키인 것 같습니다.  (참조) http://www.ciboard.co.kr/manual/tables/post

아래와 같이 읽어 오면 될것 같은데..

SELECT * FROM g5_write_free WHERE wr_is_comment = 0 

ORDER BY wr_id ASC

or wr_id = wr_parent로

다른 경우가 있을 까요?  다른 활용방법이 있는지 알려주세요.

답변 4개 / 댓글 2개

채택된 답변
+20 포인트

sir.kr/g4_qa/124449

이 질문의 답변에 있는 용도 외에도 답글 및 정렬 용도가 있습니다

답글====

댓글외에 답글(wr_replay)이라는 것이 있죠

어느게시물의 답글인지 구분하는 용도로 쓰입니다

정렬====

최신글이 먼저 나오도록 하기 위하여 기본적으로 order by wr_num, wr_reply

이렇게 사용하는데 wr_num가 없으면 wr_id를 사용해야겠죠

order by wr_id desc, wr_reply

이 코드에서는 문제점이 원글에 달린 답글의 wr_id가 크기 때문에 답글이 먼저 나와 버립니다

그렇게 되면 원글 답글을 한번에 추출할 수 없으니 원글따로 답글따로 추출하는 복잡함이 생깁니다

또 다른 문제는 order by절에 desc와 asc를 함께 사용하면 index를 타지않는다고 합니다

즉 속도가 느려진다는 말이죠

따라서 wr_num의 값을 등록시 마다 점점 감소하도록 입력하여 최신글이 먼저 나오게 하는데 asc을 사용하려는 것입니다(이것은 예전 G4시절 소스에 그누보드 개발자가 주석으로 asc가 desc보다 빠름이라고 설명을 넣어두었던 부분이기도 합니다)

속도문제는 아래 링크에 잘 설명되어있네요

jsonobject.tistory.com/408

답변에 대한 댓글 1개

감사합니다. 어느 게시물의 답글 구분하는 필드가 필요하네요.
SELECT * FROM g5_write_free WHERE wr_is_comment = 0 AND wr_reply != "" and wr_num = 원글의 wr_num
ORDER BY wr_id ASC

정렬은 전체 글(댓글 빼고) 읽어올때, 정렬이 필요한 것이네요...

SELECT * FROM g5_write_free WHERE wr_is_comment = 0 ORDER BY wr_num, wr_reply ASC

그래서 wr_num를 마이너스로 정한것이네요.
2019-10-18 (금) 14:27:58

감사합니다^^

2019-10-01 (화) 00:55:07

답변 기능을 안 쓰시면 지금 말씀하신 정렬 방법으로도 정렬이 가능합니다.

다만 답변 기능을 쓰기 시작하는 순간부터 wr_id는 정렬 관련에서는 무의미해진다고 보시면 될 것 같습니다.

답변에 대한 댓글 1개

답변 감사합니다. 질문은 wr_num이 꼭 필요한 이유입니다. SQL로 댓글 찾는것은

SELECT * FROM g5_write_free WHERE wr_is_comment = 1 and wr_parent = 1 ORDER BY wr_id ASC
로 가능한것 같습니다. wr_num가 꼭 필요한 이유가 뭔지. 즉 wr_num가 없어도 복잡한 sql로도 가능할것 같습니다. 복잡한 sql로 불가능할때 wr_num이 들어가야 되는데, 그런 부분이 어떤것이 있는지 알고 싶습니다.

답변을 작성하려면 로그인이 필요합니다.