2013-07-04 3 views
-1

말하는 부모 ID로 테이블을 조인 우리는 3 개 테이블이 :내가 MySQL의하자에 몇 가지 조언이 필요

deletionlog :

이 테이블 쇼의 모든 소프트 삭제 스레드와 게시물 삭제 시간의 날짜 :

primaryid type  dateline 
     12 thread 1372789192 
     13 thread 1372860700 
     15 thread 1372798567 
     16 thread 1372818402 
     17 thread 1372931230 
     37 post  1372790038 
     43 post  1372798587 

스레드 :

이 테이블 쇼 모든 스레드와 fourmid :

threadid forumid 
     12   2 
     13   2 
     14   2 
     15   4 
     16   2 
     17   2 

게시물 :

모든 게시물과 threadid이 테이블 쇼 :

postid threadid 
    35  12 
    36  13 
    37  13 
    38  13 
    39  12 
    40  12 
    41  14 
    42  14 
    43  14 
    44  15 
    45  16 
    46  17 

와 내가 원하는 것은 삭제 스레드의 마지막 날짜를 표시하고 삭제 된 게시물 forumid 같은 다른 테이블의 정보를 joind :

:

primaryid type  forumid dateline 
     17 thread   2 1372931230 
     43 post   2 1372931230 

OK는이 같은 게시물과 스레드의 마지막 삭제 된 날짜를 얻을 수 있었다

SELECT  * 
FROM   deletionlog AS a 
INNER JOIN  
(
    SELECT type, Max(dateline) AS dateline 
    FROM  deletionlog 
    GROUP BY type 
) AS b 
ON   a.type = b.type 
AND   a.dateline = b.dateline 
WHERE b.type in('thread','post')"; 

하지만이 테이블은 테이블 스레드와 포스트에 결합하여 4mid를 추출하여 원하는 제안을하고 싶습니다.

+0

을, 요청이있을 것이다 하찮은. 이제는 복잡성과 이상으로 고생하고 자신이 만들었습니다. – user4035

+0

것은 마지막으로 삭제 된 스레드의 4mID를 추출하고 게시하고 오른쪽 4m 섹션에서 내 vBulletin의 메인 페이지에 표시하고 이것이 내가 발견 한 유일한 방법입니다. –

+0

예 : 메인 페이지 fourm1test : lastDth : 17, date : 132537726, lastDpo : 43, date : 152437637 fourm2test : lastDth : 18, date : 13456686, lastDpo : 50, date : 434567889 –

답변

1

제공된 데이터베이스 구조는 2 차 표준 형식을 따르지 않습니다. 그래서, 나는 UNION 사용하여,이 추한 요청을 써야했다 : 당신이 2 차 정규형, deletionlog` deleted_threads 및 deleted_posts로 분할`, 유효 외래 키를 생성에 당신에게 표를 넣으면

SELECT 
    deletionlog.primaryid, 
    deletionlog.type, 
    thread.forumid, 
    deletionlog.dateline 
FROM 
    deletionlog 
INNER JOIN 
    thread 
ON 
    deletionlog.primaryid=thread.threadid 
WHERE 
    deletionlog.type='thread' 
GROUP BY 
    deletionlog.type 
HAVING 
    MAX(deletionlog.dateline) 

UNION 

SELECT 
    deletionlog.primaryid, 
    deletionlog.type, 
    thread.forumid, 
    deletionlog.dateline 
FROM 
    deletionlog 
INNER JOIN 
    post 
ON 
    deletionlog.primaryid=post.postid 
INNER JOIN 
    thread 
ON 
    post.threadid=thread.threadid 
WHERE 
    deletionlog.type='post' 
GROUP BY 
    deletionlog.type 
HAVING 
    MAX(deletionlog.dateline) 
+0

선생님 덕분에 많은 분들께 감사드립니다. 다시 한번 감사드립니다. –

관련 문제