2012-05-26 6 views
0

두 개의 테이블이 있습니다. unixtime 열 ID, forumID, 제목, 내용두 테이블의 병합 및 정렬

"스레드", 컬럼의 ID, threadID, 내용 unixtime

"의견"

나는 정렬 MySQL의 쿼리를 수행하고 싶습니다 이 두 테이블 내의 모든 행은 unixtime을 기반으로하지만 동일한 "threadID"를 두 번 표시하지 않습니다.

다음 쿼리는 두 테이블을 병합하고 정렬하지만 스레드 중복을 제거 할 수 없습니다. 나는 GROUP BY와 DISTINCT를 시도했지만 행운은 없다.

(SELECT unixtime, ID, threadID FROM comments) 
UNION 
(SELECT unixtime, ID, forumID FROM threads) 
ORDER BY unixtime DESC 

포럼의 FrontPage를 보여주기 위해 동일한 스레드를 두 번 이상 표시하는 것은 의미가 없습니다.

편집 : 최신 의견과 최신 스레드를 모두 표시하고 싶습니다. 당신이 가입 키가없는 경우

답변

1
SELECT unixtime, ID, type, type_id 
FROM ((SELECT unixtime, ID, 'comment' AS type, threadID, forumID 
     FROM ( SELECT unixtime, ID, threadID 
       FROM comments 
       ORDER BY unixtime DESC) AS h 
     GROUP BY threadID) 
     UNION ALL 
     (SELECT unixtime, ID, 'thread', ID, forumID 
     FROM threads) 
     ORDER BY unixtime DESC) AS h2 
GROUP BY threadID 
ORDER BY unixtime DESC 

만의 고유 threadID을 얻을하는 데 도움이 될 것입니다. 포럼 또는 스레드 ID인지 여부를 알고 싶습니까?

+0

거의 작동합니다! 유일한 문제는 동일한 스레드가 "스레드"테이블에서 한 번, "주석"테이블에서 한 번 나타납니다. 이 방법을 피하는 방법은 무엇입니까? – Christoffer

+0

예, 실제로 있습니다. "forumID" – Christoffer

+0

업데이트 된 쿼리를 사용해보십시오. –

0

쉬운 해결책은 :

Select DISTINCT tbl.unixtime from 
    (
    (SELECT unixtime, ID, threadID FROM comments) 
    UNION 
    (SELECT unixtime, ID, forumID FROM threads) 
    ORDER BY unixtime DESC)) 
    As tbl 
+0

나는 unixtime 이상이 필요, 그래서 나는 시도했다 : 는'DISTINCT tbl.unixtime을 선택 tbl.ID, tbl.tID을 ( 이 (unixtime을 선택에서, ID, UNION) 의견 FROM TID로 threadID .. unixtime의 DESC의 LIMIT 0 BY ORDER, 100 )로 tbl' 그러나 프로그래머는 여전히 :( – Christoffer

+0

는 말에) unixtime (가 그룹을 사용할 수 복제 –

0

이것은 내가 몇 가지 물건을 변경

(SELECT forumID, ID, unixtime FROM threads) 
UNION 
(SELECT distinct(threadID), ID, max(unixtime) FROM comments GROUPBY threadID) 
ORDER BY unixtime DESC 
+0

이을 (forumID 스레드로부터 TID로, ID를 unixtime을 선택) 유일한 문제는 동일한 스레드가 "스레드"와 테이블에서 한 번, "주석"테이블에서 한 번 나타납니다. 이것을 피하는 방법은 없습니까? – Christoffer

+0

당신은 포럼의 한 스레드와 그 스레드의 한 주석만을 원합니다. m i right ?? – Uttara

+0

스레드를 한 번만 표시하고 싶습니다. 위의 로빈스 솔루션은 완벽하게 작동합니다! – Christoffer