2011-04-25 3 views
0

messages_message 테이블을 messages_threads 테이블에 조인 할 다음 쿼리에 조인을 추가하고 messages_messages의 가장 최근 행에서 'body'및 'time'필드를 반환해야합니다. 여기서 messages_message.threadid = messages_threads.id.MySQL에서 가장 최근 메시지를 반환 하시겠습니까?

미안하지만 너무 혼란 스럽다. 다음은 현재 쿼리입니다. 'body'및 'time'필드를 제외하고 모든 것을 올바르게 가져옵니다.

SELECT 
    messages_threads.id AS threadid, messages_threads.name AS recipientsname, 
    senderid, username AS sendername, pictures.url AS senderpicture 
FROM 
    messages_recipients 
    JOIN messages_threads 
     ON messages_threads.id = messages_recipients.threadid 
    JOIN users 
     ON users.id = messages_threads.senderid 
    JOIN pictures 
     ON messages_threads.senderid = pictures.userid 
     AND pictures.profile = 1 
WHERE messages_recipients.userid = $userid 

답변

3

당신이 1 개 행을 리턴 할 것 messages_message 테이블의 하위 쿼리를 추가 할 수 있습니다 .. 당신은 몸과 시간도 ... 또는 u가 더 쿼리를 지정할 수 있습니다에 의해 그룹이 필요합니다 생각 모든 스레드. 예 :

SELECT 
    messages_threads.id AS threadid, messages_threads.name AS recipientsname, 
    senderid, username AS sendername, pictures.url AS senderpicture 
FROM 
    messages_recipients 
    JOIN messages_threads ON messages_threads.id = messages_recipients.threadid 
    JOIN users ON users.id = messages_threads.senderid 
    JOIN pictures ON messages_threads.senderid = pictures.userid AND pictures.profile = 1 
    JOIN (SELECT threadid, MAX(id) AS postid FROM messages_message GROUP BY threadid) t ON message_threads.id = t.threadid 
    JOIN messages_message ON t.threadid = messages_message.threadid AND t.postid = messages_message.id 
WHERE messages_recipients.userid = $userid 
1

나는

+0

안녕하세요, 아직 메시지 _ 메시지에 가입을 추가하지 않았습니다. 방법을 결정하려고합니다. 그룹별로 하위 쿼리를 제안 하시겠습니까? – Walker

+0

message_thread 테이블 필드에서 count 또는 examine gruop by가 필요하다는 것을 알고있는 경우. 그렇지 않으면 간단한 해결책이 많이 있습니다. –

+0

Juddas 대답이 효과가 있었습니까? 더 간단한 해결책이 있습니까? 도와 줘서 고맙다! – Walker

관련 문제