2013-10-19 5 views
0

내가하려는 것은 메시지라는 테이블이 있다는 것입니다. 그것은 5 개의 필드 ID, SENDER, RECIPIENT, MESSAGE 및 TIMESTAMP를 가지고 있습니다. 이 앱을 사용할 때 각 사용자는 ID를 얻습니다. 이 앱을 사용하여 보낸 각 메시지는 수신자의 ID로이 테이블에 저장됩니다.다른 테이블의 데이터에서 테이블 생성

이제 각 대화의 최신 메시지를 나열한 다음 각 대화를 마지막 메시지의 날짜순으로 나열 할 수 있습니다. 이 테이블을 CONVERSATIONS라고 부를 수 있습니다.

는 두 사용자의 XX와 YY 사이의 각각의 대화는 우리가 메시지 만 테이블에서 대화의 각각의 최신 메시지를 원하는 CONVERSATIONS 테이블에서

SELECT * FROM MESSAGES WHERE SENDER=XX and RECIPIENT=YY ORDER BY TIMESTAMP 

에 의해 생성 된 테이블로 정의된다.

저는 PHP를 사용하고 싶지 않고 MySQL만을 사용하여 해결책을 찾고있었습니다. 고맙습니다.

답변

0

정확하게 이해했다면 다음과 같이 시도해보십시오. 그룹핑

select MESSAGES.*, 
concat(SENDER|RECIPIENT, "r", SENDER&RECIPIENT) as combo 
from MESSAGES inner join (
    select max(TIMESTAMP) maxtime, 
    concat(SENDER|RECIPIENT, "r", SENDER&RECIPIENT) as combo2 
    from MESSAGES group by combo2 
) subq 
on combo = combo2 and MESSAGES.TIMESTAMP = subq.maxtime 
order by MESSAGES.TIMESTAMP desc 

다음 표준 기술 (from here)를 사용하고, 또한 I 문자열 콤보 식 (발신자, 수신자)로부터 가환 주입이 사용된다. '절에'에서 알 수없는 열 '콤보'-

그것은 당신에게 내가 그것을 실행하고이 오류 1054 #을 발견

+0

정렬되지 않은 쌍 {보낸 사람,받는 사람}로 그룹화 최대 타임 스탬프를 가진 모든 행을 반환합니다 –

관련 문제