2012-05-18 2 views
1

내 보드가 다른 새 스레드가 생성되거나 다른 스레드에서 응답이 만들어 질 때까지 새 스레드가 맨 위에 표시되는 순서로 스레드를 정렬하길 원합니다. 이 경우 스레드가 1에서 2 등으로 내려갑니다.답글과 날짜별로 날짜순 정렬

그러나 지금 사용하고있는 코드는 다음과 같습니다. 새 스레드가 생성되면 하단에 표시되지만 회신을하면 맨 위로 이동합니다. 그래서 고쳐야 할 필요가있는 것은 맨 위에 만들어진 최신 스레드를 보여주는 것입니다.

SELECT b.id, b.name, b.subject, b.maintext, b.ip, b.date, b.img, b.replycount, MAX(r.date) 
FROM 
    board b 
    LEFT JOIN reply r ON r.id = b.id 

GROUP BY b.id, b.date 
ORDER BY GREATEST(b.date, MAX(r.date)) DESC 
LIMIT 50; 
+0

당신이 당신의 질문을 편집 할 수 있습니다 당신이 너무 업데이트에 대한 관심이 경우


(그래서 b.date는 최대 (r.date)보다 클 수 있습니다) uestion을 사용하고 테이블의 열을 추가 하시겠습니까? –

+0

내가 생각하는 것과 같은 것. – Neku

+1

다른 테이블에 스레드와 응답을 저장하는 이유는 무엇입니까? 테이블을 모두 하나의 테이블에 저장하면 큰 데이터 세트에 대한 성능 문제가 발생하지 않을 것입니다. –

답변

2

greatest 것이다 return null 인수의 내가 새로운 스레드와 새로운 답변을 걱정하는 경우, 유착 사용하는 것이 좋습니다,하지만 원래 스레드 업데이트에 대해> 널 (null) =을 경우 :

order by coalesce(MAX(r.date), b.date) 

order by greatest(b.date, coalesce(MAX(r.date), b.date)) 
+0

하지만 두 날짜 중'가장 큰 것 '을 찾지 못할 것입니다. –

+0

@ypercube 지금 회신이 원래 게시물보다 오래 될 수 있습니까 ??? – Aprillion

+0

잘 작동합니다. 고맙습니다. – Neku

관련 문제