mysql 쿼리에서 distinct 사용시 ORDER BY 가 무시될때..

망치의 이미지

테이블 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:

망치의 이미지

SELECT A.no, A.subject
FROM 게시물테이블 as A left join 답글테이블 as B on A.no=B.parent
ORDER BY B.reg_date 
DESC LIMIT 0,5

딱 이정도에서 A.no 가 중복값 없이 정렬이 되면 좋은데.. 그걸 모르겠습니다. ㅜㅜ

---------------------------------------
http://www.waitfor.com/
http://www.textmud.com/

익명 사용자의 이미지

흠 distinct ㅤㅃㅒㅤ고 top을써보세여

망치의 이미지

SELECT A.no as no, A.subject as subject, max(B.reg_date) as rd
FROM 게시판테이블 A, 답글테이블 B
WHERE
A.no=B.parent
GROUP BY no
ORDER BY rd DESC
LIMIT 0,10

이걸로 일단 해결 됐습니다. 그런데 쿼리 속도가 0.16 초가 넘게 걸리는데다가 답글이 늘어날수록 속도는 점점 더 떨어질것같아 걱정입니다..

---------------------------------------
http://www.waitfor.com/
http://www.textmud.com/

익명 사용자의 이미지

서브쿼리로 일단 겹치는거 지워주고 select해서
group by랑 order by
하면 더 성능이 나을라나여?

처로의 이미지

조건 없이 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에도 인덱스를 걸어 두시는 것이 좋습니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.