테스트 사이트 - 개발 중인 베타 버전입니다

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 포인트

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 로 묶어서 정보들과 조회한다음 그 최근시간으로 정렬하였습니다.

 

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

하늘뚱
2년 전

일자별, 회원Id별, 보드id 순으로 나오게 하고 싶다는거죠?

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

쿼리 뒤에다가... order by bo_datetime desc 맞나요? 안되면 asc 로 해서 최신순 찍으면 될것같아요 

     mb_id 5번인 회원의 게시물 (bo_id = 1)을 그 다음에 나오도록 함 이부분은 이해를 못하겠네요 그냥 배열로 처리 안되나요?

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인