mysql 쿼리 질문드립니다.

mysql 쿼리 질문드립니다.

QA

mysql 쿼리 질문드립니다.

본문

안녕하세요! 앞전에 같은 질문을 올렸었는데 제 질문이 잘못되었는지, 내용이 부족한것 같아

내용 설명을 추가하여 새로 올리는 점 양해 부탁드립니다ㅠㅠ


3033727454_1681652234.7996.png

3033727454_1681652309.5427.png

 

제가 원하는 결과는 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)을 그 다음에 나오도록 함 이부분은 이해를 못하겠네요 그냥 배열로 처리 안되나요?

답변을 작성하시기 전에 로그인 해주세요.
전체 1,543
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT