mysql 쿼리 질문드립니다.
본문
안녕하세요! 앞전에 같은 질문을 올렸었는데 제 질문이 잘못되었는지, 내용이 부족한것 같아
내용 설명을 추가하여 새로 올리는 점 양해 부탁드립니다ㅠㅠ
제가 원하는 결과는 board 테이블의 최신순으로 작성된 회원의 게시물을 모두 먼저 볼수있도록 하는 것입니다.
예) 4월17일 최신순으로 작성된 회원인 mb_id 5번 회원의 다른 게시물도 우선순의를 먼저 노출하도록 함
mb_id 5번인 회원의 게시물 (bo_id = 1)을 그 다음에 나오도록 함
기존에는 board테이블의 최신순으로 for문을 돌려 같은 mb_id끼리 배열에 담을수 있도록 하여
원하는 결과값을 얻을수 있었지만 게시물 데이터가 많아지면서 for문을 처음부터 끝까지 돌려
같은 mb_id를 배열에 담아야하기 때문에 시간이 많이 걸려 mysql 쿼리로 이렇게 짤수 있지 않을까 싶어
질문을 드립니다.
답변 3
DDL.
-- board table create.
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
-- member table create.
CREATE TABLE `member` (
`mb_id` int NOT NULL,
`mb_name` varchar(45) DEFAULT NULL,
PRIMARY KEY (`mb_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3
-- member_info table create
CREATE TABLE `member_info` (
`mb_id` int NOT NULL,
`mb_info` varchar(45) DEFAULT NULL,
PRIMARY KEY (`mb_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3
Result Query.
select
b.bo_datetime,
b.bo_id,
b.mb_id,
m.mb_name,
i.mb_info,
(select max(bo_datetime) from Board sub where sub.mb_id = b.mb_id group by mb_id limit 1) as latest
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 latest desc, b.bo_datetime desc;
서브쿼리를 이용했습니다.
가장 최근 시간을 mb_id 로 묶어서 정보들과 조회한다음 그 최근시간으로 정렬하였습니다.
!-->!-->
쿼리 뒤에다가... order by bo_datetime desc 맞나요? 안되면 asc 로 해서 최신순 찍으면 될것같아요
mb_id 5번인 회원의 게시물 (bo_id = 1)을 그 다음에 나오도록 함 이부분은 이해를 못하겠네요 그냥 배열로 처리 안되나요?
일자별, 회원Id별, 보드id 순으로 나오게 하고 싶다는거죠?
답변을 작성하시기 전에 로그인 해주세요.