2014-10-28 2 views
0

특정 사용자의 채팅 파트너별로 그룹화 된 마지막 채팅 메시지를 쿼리하고 싶습니다. 내 현재 검색어가 작동하지만 파트너가 타임 스탬프별로 그룹화 한 사용자의 메일을 선택합니다. 하지만 다른 사용자가이 특정 사용자에게 보낸 마지막 메시지가 타임 스탬프별로 정렬되기를 원합니다. Sqlfiddle최대 열이있는 쿼리로 그룹화

예상 결과 : 여기

내 바이올린입니다

"x to me last"라고 내가 채팅 메시지를 준비했습니다

... message 
-------------------- 
... r to me last 
... m to me last 

2 행과 가장 큰 타임 스탬프 메시지 내 현재 검색어 :

SELECT A.*, DU.user as username, DU.photo, DU.city, DU.year, DU.month, DU.day 
      FROM db_chats A 
      INNER JOIN (
       SELECT max(timestamp) ts, user, partner 
       FROM db_chats 
       GROUP BY partner) T 
       on A.timestamp=T.ts 
      and A.user=T.user 
      LEFT JOIN db_users DU on T.partner = DU.id 
      WHERE A.user = 'RGXiLkVpKGc4FSU7SeyMlZ7z' ORDER BY A.timestamp desc 

답변

1

당신은 결과를 얻으려면 this 쿼리를 사용할 수 있습니다 작동하지 않는 원래의 쿼리가 당신의 내면에 의한 이유

select A.*, DU.user as username, DU.photo, DU.city, DU.year, 
DU.month, DU.day from db_chats A, db_users DU where timestamp in 
(select max(timestamp) from db_chats 
where partner ="RGXiLkVpKGc4FSU7SeyMlZ7z" group by user) 
and a.USER = DU.ID   
order by timestamp desc 

편집

이유 가입 :

 SELECT max(timestamp) ts, user, partner 
     FROM db_chats 
     GROUP BY partner 

이 쿼리의 결과는 다음과 같습니다.

|   TS |      USER |     PARTNER | 
|------------|--------------------------|--------------------------| 
| 1414453415 | xAlX66JQfmsOcotg00wPsZfx | RGXiLkVpKGc4FSU7SeyMlZ7z | 
| 1414453387 | RGXiLkVpKGc4FSU7SeyMlZ7z | xAlX66JQfmsOcotg00wPsZfx | 
| 1414443546 | RGXiLkVpKGc4FSU7SeyMlZ7z | YZQF4hbvyjbS0p7wYIR2Hkq9 | 

db_chats 테이블 (아래)을 확인하는 경우, 해당 시간 기록에서 요청한 메시지를 찾을 수 없습니다. 따라서 쿼리는 "r to me last"를 반환하지 않습니다.

|      USER |     PARTNER |  MESSAGE | TIMESTAMP | 
|--------------------------|--------------------------|--------------|------------| 
| xAlX66JQfmsOcotg00wPsZfx | RGXiLkVpKGc4FSU7SeyMlZ7z |  r to me | 1414443447 | 
| YZQF4hbvyjbS0p7wYIR2Hkq9 | RGXiLkVpKGc4FSU7SeyMlZ7z |  m to me | 1414442845 | 
| YZQF4hbvyjbS0p7wYIR2Hkq9 | RGXiLkVpKGc4FSU7SeyMlZ7z | m to me last | 1414453415 | 
| RGXiLkVpKGc4FSU7SeyMlZ7z | xAlX66JQfmsOcotg00wPsZfx |  me to r | 1414453387 | 
| RGXiLkVpKGc4FSU7SeyMlZ7z | YZQF4hbvyjbS0p7wYIR2Hkq9 |  me to m | 1414443546 | 
| xAlX66JQfmsOcotg00wPsZfx | RGXiLkVpKGc4FSU7SeyMlZ7z | r to me last | 1414453234 | 
+0

에 의해 그룹 MAX 기능을 사용하기 전에 내부 쿼리의 정렬 순서입니다. 완벽하게 작동합니다! 나는 예상 한 결과를 얻었고 올바른 바이올린을 가지고 있습니까? – Patrick

+0

[ "this"] (http://sqlfiddle.com/#!2/d10ce/84/0)을 클릭하십시오. :) 안녕하세요. 오신 것을 환영합니다. – Payam

+0

하지만 timestamp desc로 정렬하지 않습니까? – Patrick

1

이것은 필요한 쿼리의 단순화 된 버전입니다. 사용자 테이블에 조인을 추가하지 않아도 사용자에 대한 추가 데이터를 가져올 수 있지만이 방법이 더 명확하다고 생각합니다.

SELECT user, partner,message,MAX(timestamp) FROM 
    (SELECT user, partner,message,timestamp FROM db_chats ORDER BY timestamp DESC) DC 
    WHERE partner = 'RGXiLkVpKGc4FSU7SeyMlZ7z' 
    GROUP BY user,partner 

의 핵심은 대단히 감사합니다

+0

감사합니다, 올바르게 작동합니다 – Patrick

관련 문제