검색 쿼리입니다. 한번 봐주세요

검색 쿼리입니다. 한번 봐주세요

QA

검색 쿼리입니다. 한번 봐주세요

답변 2

본문

select distinct wr_parent from g5_write_board where ((INSTR(wr_1, '스')) ) and (wr_num between -3 and (-3 + 0)) order by wr_num, wr_reply limit 0, 10

wr_1에서 "스"를 검색했을때 나오는 결과가 이상해서 쿼리를 찍어 보았습니다.
위 쿼리가 맞나요?
distinct 가 나오면 안되지 않나요?
그러니까 한개만 나오는거 같은데 아닌가요?
또 (wr_num between -3 and (-3 + 0))는 어떤의미인가요?
조언을 부탁드립니다.
 

이 질문에 댓글 쓰기 :

답변 2

검색결과 부모글의 wr_id로 잡아야해서 제목등해서 리스트화가 가능하니 distinct로 그룹화한다고 생각하시면 되고 원글만 조회하고자 하신다면 distinct를 빼고 where에 wr is comment = 0을 넣어주는 방법도 있습니다. 인덱스 잡기 나름이라 wr_num은 어드민 config설정에 검색 단위 설정값이 있습니다. 즉 테이블 전체가 아닌그 단위값에 맞춰 분활해서 검색하게 됩니다. Spt인가 그변수 따라가보시면 이해되실듯 합니다.

 

SELECT DISTINCT wr_parent
FROM g5_write_board
WHERE ((INSTR(wr_1, '스')))
  AND (wr_num BETWEEN -3 AND (-3 + 0))
ORDER BY wr_num, wr_reply
LIMIT 0, 10;

1. SELECT DISTINCT wr_parent

  • g5_write_board 테이블에서 wr_parent 컬럼만 뽑아옵니다.

  • DISTINCT 키워드를 사용했기 때문에 중복된 wr_parent 값은 제거합니다.
    → 즉, 같은 부모글 ID가 여러 개 있어도 한 번만 반환됨.


2. FROM g5_write_board

  • 데이터를 조회할 대상 테이블은 g5_write_board.


3. WHERE 조건

조건이 2개로 나뉘어 있어요:

a) INSTR(wr_1, '스')

  • wr_1 필드 안에 '스' 라는 문자열이 포함되어 있는지 확인.

  • INSTR(문자열, 찾을_문자열) → 포함되어 있으면 0보다 큰 값, 포함 안되면 0.

  • 여기서는 단순히 조건문에서 쓰였으므로, wr_1 값에 '스'가 들어있는 행만 선택.


b) wr_num BETWEEN -3 AND (-3 + 0)

  • wr_num 컬럼 값이 -3 이상 -3 이하인 경우, 즉 wr_num = -3인 행만 선택.
    BETWEEN a AND b는 inclusive(포함) 범위 조건이므로 wr_num = -3과 동일한 조건.


4. ORDER BY wr_num, wr_reply

  • 먼저 wr_num 기준으로 오름차순 정렬

  • 그 다음 같은 wr_num 내에서 wr_reply 기준으로 정렬.


5. LIMIT 0, 10

  • 정렬된 결과 중에서 처음 0번째부터 최대 10개의 레코드만 출력.


정리

이 쿼리는 게시판 테이블에서:

  • wr_1 컬럼 값에 '스'가 포함되어 있고

  • wr_num 값이 -3인 글을 찾은 뒤

  • 같은 부모글 ID는 중복 없이

  • wr_numwr_reply 순으로 정렬하고

  • 상위 10개의 wr_parent ID만 출력하는 것.


실제 사용 예

그누보드(G5) 구조상:

  • wr_num은 원글 그룹 번호

  • wr_parent는 부모글 ID(원글의 wr_id)

  • wr_reply는 댓글이나 대댓글 순서

이걸로 미루어 보면,
특정 그룹 글 중에 wr_1 값에 '스'가 포함된 글들의 원글 ID 목록을 찾는 용도로 쓰인 거예요.

 

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 129,102
© SIRSOFT
현재 페이지 제일 처음으로