2014-07-24 4 views
1

내 데이터베이스에 모든 대화 쌍을 나열하고 싶습니다. 테이블 message에 메시지 정보를 저장하는 곳이 있습니다.
나는 또한 시도했지만 나를 위해 작동하지 않는다 Link 별개의 선택 전용 열이 지정되어 있기 때문에.
Ex. $_SESSION['userid'] = 1데이터베이스의 두 열로 그룹화하는 방법?

테이블 메시지

sender_id sendto_id created(datetime) 
1   2 
1   2 
1   3 
1   4 
3   1 
3   1 
2   4 
4   2 

내 결과는 1,33,1 사이에 명성을 가지고합니다.

sender_id sendto_id 
1   2 
1   3 
1   4 
3   1 

나는 이것을 좋아하고 각 쌍에 대해 가장 최근에 추가 된 필드를 선택합시다. Ex. 1-2(1), 1-2(2)2-12-1이 최신 인 경우 2-1이거나 최신 인 경우 1-2(2)이어야합니다.

sender_id sendto_id created(datetime) 
2   1   newest of pair 1-2 or 2-1 
1   3   newest of pair 1-2 or 2-1 
1   4   newest of pair 1-2 or 2-1 

여기 내 SQL이 도와주세요! 고맙습니다.

select m.*, 
     (select MAX(created) 
      from message n 
     where (n.senderid = m.sendtoid AND n.sendtoid = '$userid') 
      OR (n.senderid = '$userid' AND n.sendtoid = m.sendtoid)) lastsend 
    from message m 
where (m.senderid = '$userid' OR m.sendtoid = '$userid') 
group by m.senderid, m.sendtoid 
order by lastsend desc 

답변

1

이게 원하는가요?

select least(sender_id, sendto_id) as sender_id, 
     greatest(sender_id, sendto_id) as sendto_id, 
     min(created_datetime) 
from message m 
group by least(sender_id, sendto_id), greatest(sender_id, sendto_id); 
+0

그래, 그래도 문제가 해결되지 않았습니까? 'SQL 구문에 오류가 있습니다. 올바른 구문을 보려면 MySQL 서버 버전에 해당하는 매뉴얼을 확인하십시오. 4 행 – Marcus

+2

@Marcus에서 'sender_id, 최대 (sender_id, sendto_id)'와 같이 사용하십시오. . . 'as '는'group by' 절의 copy-and-paste 오류에 속하지 않습니다. –

+0

감사합니다. @Gordon 나는 바뀌었고 효과가있었습니다. – Marcus

관련 문제