mysql 쿼리에서 distinct 사용시 ORDER BY 가 무시될때..
글쓴이: 망치 / 작성시간: 토, 2006/02/11 - 3:07오후
테이블 A no subject ----------------- 10 제목.. 11 제목.. 12 제목.. 13 제목.. 14 제목.. 테이블 B no parent reg_date ---------------------------- 1 10 1139629085 2 10 1139629090 3 11 1139629100 4 11 1139629150 5 12 1139629200 6 10 1139629250 7 11 1139629270
SELECT distinct(B.parent), A.subject FROM 게시물테이블 as A left join 답글테이블 as B on A.no=B.parent ORDER BY B.reg_date DESC LIMIT 0,5
테이블 B 는 게시판 답글에 대한 테이블입니다. no 는 답글의 고유 번호, parent 는 해당 답글이 속한 글 번호, reg_date 는 등록시간입니다.
phpBB 와 같이 최근답글이 달린 글 순으로 목록을 뽑아보고자 하는데, 중복되지않게 하기위해 사용한 distinct 때문에 order by B.reg_date 가 무시돼버립니다..
중복된 결과를 보이지 않으면서 reg_date 를 이용해 정렬해서 가장 최근에 답글이 달린 글을 가져오고 싶습니다..
개발자가 아닌 '사용자' 이다보니 이렇게 막힙니다 :cry:
Forums:
[code:1]SELECT A.no, A.subjectFROM 게시물
딱 이정도에서 A.no 가 중복값 없이 정렬이 되면 좋은데.. 그걸 모르겠습니다. ㅜㅜ
---------------------------------------
http://www.waitfor.com/
http://www.textmud.com/
흠 distinct ㅤㅃㅒㅤ고 top을써보세여
흠 distinct ㅤㅃㅒㅤ고 top을써보세여
[code:1]SELECT A.no as no, A.subject as
이걸로 일단 해결 됐습니다. 그런데 쿼리 속도가 0.16 초가 넘게 걸리는데다가 답글이 늘어날수록 속도는 점점 더 떨어질것같아 걱정입니다..
---------------------------------------
http://www.waitfor.com/
http://www.textmud.com/
서브쿼리로 일단 겹치는거 지워주고 select해서group by랑 o
서브쿼리로 일단 겹치는거 지워주고 select해서
group by랑 order by
하면 더 성능이 나을라나여?
조건 없이 join해 버리는 것은 별로 안 좋아 보이구요, MySQL 4
조건 없이 join해 버리는 것은 별로 안 좋아 보이구요, MySQL 4.1 이상을 쓰신다면 다음과 같이 서브쿼리를 이용하시는 게 어떨까요?
select A.no, A.subject
from A
left join (
select B.parent, max(B.reg_date) as max_reg_date
from B
group by B.parent
) as B1 on A.no = B1.parent
order by B1.max_reg_date desc
limit 0, 5
4.0 이하 버전을 쓰신다면 create temporary table 해서 위의 괄호 안의 내용을 insert 하고 그 테이블에 대해 left join해서 검색하시는 것이 속도가 빠를 수 있습니다.
그리고 검색 속도를 위해서는 A.no는 물론 B.parent에도 인덱스를 걸어 두시는 것이 좋습니다.
댓글 달기