쿼리질문좀 드리겠습니다. 0 3 678

by 밍밍밍밍 [MySQL] [2017.07.28 12:27:46]


SELECT 	@RNUM:=@RNUM+1 ROWNUM ,
	       BSEQ, BCODE, BSORT, BSUBJ, BCONT, BHIT,  
	 				DATE_FORMAT(BWRDT,'%Y.%m.%d') BWRDT
	 			FROM (SELECT @RNUM:=0) R, BOARD      
	 			WHERE BCODE = 'N'
        ORDER BY BSEQ DESC 

 

이 쿼리에서 다른테이블의 FNAME 컬럼값을 구하기위해

아래와 같이 쿼리를 쓰려고 하는데 에러가 나는상황입니다.

문법이나 위치가 잘못된건지 조언좀 부탁드리겠습니다.

 

SELECT 	@RNUM:=@RNUM+1 ROWNUM ,
	       BSEQ, BCODE, BSORT, BSUBJ, BCONT, BHIT,  
	 				DATE_FORMAT(BWRDT,'%Y.%m.%d') BWRDT,
          (SELECT FNAME FROM BOARD_FILE where board.BSEQ = board_file.BSEQ) BFILE 
	 			FROM (SELECT @RNUM:=0) R, BOARD      
	 			AND BCODE = 'N'
        ORDER BY BSEQ DESC 

 

by 마농 [2017.07.28 13:16:26]

1. Where 절이 And 로 바뀌었네요.
2. 첨부파일인가요?
  - 첨부파일이 1개만 등록 가능하다면 위와 같이 사용해도 됩니다.
  - 여러개의 첨부를 등록 할 수 있다면 위와 같이 사용하면 안됩니다.
  - 여러개라면 group_concat 으로 묵어서 조회해야 할 듯
3. @RNUM 을 사용하는 이유가?
  - 페이징 처리 때문인가요?
  - 그렇다면 첨부파일 가져오는 부분은 페이징 이후로 처리를 미루세요.


by 밍밍밍밍 [2017.07.28 15:20:29]

답변감사드립니다.

1.  이부분은 where인데 오타났네요..

2. 첨부파일이 1개이상입니다.

3. 페이징처리때문에 썻습니다.

 

쿼리를 다른식으로 짜야하나보군요 ㅠㅠ


by 마농 [2017.07.28 15:35:29]

rownum 은 오라클 방식을 흉내낸 것입니다.
mysql 에는 LIMIT 이라는 좀 더 쉬운 페이징 방법이 존재합니다.

SELECT bseq, bcode, bsort, bsubj, bcont, bhit, bwrdt
     , (SELECT GROUP_CONCAT(fname) FROM board_file WHERE bseq = a.bseq) bfile
  FROM (SELECT bseq, bcode, bsort, bsubj, bcont, bhit
             , DATE_FORMAT(bwrdt, '%Y.%m.%d') bwrdt
          FROM board
         WHERE bcode = 'N'
         ORDER BY bseq DESC
         LIMIT  0, 10   -- 1 Page
--       LIMIT 10, 10   -- 2 Page
--       LIMIT (page_num - 1) * page_cnt, page_cnt
        ) a
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입