mysql 쿼리 질문드립니다. 채택완료
귿귿
2년 전
조회 2,530
안녕하세요! 앞전에 같은 질문을 올렸었는데 제 질문이 잘못되었는지, 내용이 부족한것 같아
내용 설명을 추가하여 새로 올리는 점 양해 부탁드립니다ㅠㅠ


제가 원하는 결과는 board 테이블의 최신순으로 작성된 회원의 게시물을 모두 먼저 볼수있도록 하는 것입니다.
예) 4월17일 최신순으로 작성된 회원인 mb_id 5번 회원의 다른 게시물도 우선순의를 먼저 노출하도록 함
mb_id 5번인 회원의 게시물 (bo_id = 1)을 그 다음에 나오도록 함
기존에는 board테이블의 최신순으로 for문을 돌려 같은 mb_id끼리 배열에 담을수 있도록 하여
원하는 결과값을 얻을수 있었지만 게시물 데이터가 많아지면서 for문을 처음부터 끝까지 돌려
같은 mb_id를 배열에 담아야하기 때문에 시간이 많이 걸려 mysql 쿼리로 이렇게 짤수 있지 않을까 싶어
질문을 드립니다.
댓글을 작성하려면 로그인이 필요합니다.
답변 3개
채택된 답변
+20 포인트
2년 전
DDL.
</p>
<p>-- board table create.</p>
<p>CREATE TABLE `board` (
`bo_id` int NOT NULL,
`mb_id` int DEFAULT NULL,
`bo_datetime` datetime DEFAULT NULL,
PRIMARY KEY (`bo_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3</p>
<p> </p>
<p>-- member table create.</p>
<p>CREATE TABLE `member` (
`mb_id` int NOT NULL,
`mb_name` varchar(45) DEFAULT NULL,
PRIMARY KEY (`mb_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3</p>
<p> </p>
<p>-- member_info table create</p>
<p> </p>
<p>CREATE TABLE `member_info` (
`mb_id` int NOT NULL,
`mb_info` varchar(45) DEFAULT NULL,
PRIMARY KEY (`mb_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3</p>
<p>
Result Query.
</p>
<p>select
b.bo_datetime,
b.bo_id,
b.mb_id,
m.mb_name,
i.mb_info,
<strong>(select max(bo_datetime) from Board sub where sub.mb_id = b.mb_id group by mb_id limit 1) as latest </strong>
from Board b join member m on b.mb_id = m.mb_id join member_info i on m.mb_id = i.mb_id
order by <strong>latest</strong> desc, b.bo_datetime desc;</p>
<p>
서브쿼리를 이용했습니다.
가장 최근 시간을 mb_id 로 묶어서 정보들과 조회한다음 그 최근시간으로 정렬하였습니다.
로그인 후 평가할 수 있습니다
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인