2014-02-06 2 views
1

안녕하세요, 저는 PHP와 MySQL로 메시징 시스템을 만들려고합니다.PHP/MySQL을 사용하는 메시징 시스템

MySQL의 테이블은 간단하다 : ID 보낸 사람 수신기 텍스트 타임 스탬프 내가 다소 페이스 북/트위터 같은 메시지를 만들기 위해 노력하고있어

그렇게 목록이 '대화'와 마지막 메시지에 대화에서을 봅니다.

(SELECT * FROM messages WHERE receiver = 13 OR sender = 13 GROUP BY receiver,sender ORDER BY id ASC) ORDER BY id ASC 
+0

키워드로 그룹화 한 후 시도해 볼 수 있습니다. – jeeva

답변

1
SELECT messages.* FROM messages, (SELECT MAX(id) as lastid FROM messages 
WHERE receiver = 13 OR sender = 13 
GROUP BY CONCAT(LEAST(receiver,sender),'.',GREATEST(receiver,sender))) as conversations 
WHERE id = conversations.lastid 
ORDER BY timestamp DESC 

채팅 파트너 간의 고유 대화 ID가 필요합니다. 하위 쿼리로 시뮬레이션했습니다. 도움이 되었기를 바랍니다.

+0

감사합니다. 이것은 내 질문이 아니지만 나는 똑같은 것을 찾고 있었고 이것은 완벽하게 작동했습니다! – ShoeLace1291

1

업데이트을 :

내가 기압이 무엇 완벽 작동하는지 잘 모르겠어요 :

ORDER BY timestamp DESC 
:

SELECT * FROM messages 
WHERE receiver = 13 
GROUP BY receiver,sender 
ORDER BY timestamp DESC 
LIMIT 1 

UNION ALL 
SELECT * FROM messages 
WHERE sender = 13 
GROUP BY receiver,sender 
ORDER BY timestamp DESC 
LIMIT 1 

이 순서를 반대로

+0

문제는 여러 대화를 보는 것입니다. 1 인당 1 개를보고 대화에서 보낸 마지막 메시지를 볼 필요가 있습니다. – Josh

+0

주문 후 – user3106988

+0

주문 후 LIMIT 1을 사용할 수 있지만 다른 사용자와 대화가 표시되지 않습니다. – Josh

0

수신을위한 DESC 새 행. 당신이
(receiver = 13 AND sender = 'usersender id') OR (receiver ='usersender id' AND sender = 13) 그것을 시도해야 할
BY ORDER AFTER

(SELECT * FROM messages WHERE receiver = 13 OR sender = 13 GROUP BY receiver,sender ORDER BY id DESC) 

및 SET LIMIT 1, 1 내가 생각 : AND ASC 또는 설정하지, 기본값은 ASC입니다!

+0

이것은 작동 하나, 다른 사람들에게 보낸 메시지와 그들이 응답 한 메시지를 볼 수 있습니다. 나는 2 명의 사람들 사이에서 보내지는 마지막 메시지와 대화를하려고합니다. – Josh

+0

LIMIT 1,1 시동 후 –

+0

다른 사람들과 대화하는 데 표시되지 않습니다. – Josh

관련 문제