2012-01-17 4 views
3

으로 나는 두 사용자간에 메시지를 저장하는 테이블라는 의견이 있고, 테이블 구조는 다음과 같습니다 : 만 사이의 최신 메시지를 표시 할 데이터를 조회 할그룹 메시지는 최신 응답

id | from_id | to_id | comment | date 

두 당사자. 나는 그것을 전에 보았다.

MYSQL을 사용하고 있습니다.

답변

2

두 명의 사용자 ID 번호는 12입니다. 당신이 정말로 학자가되고 싶었 경우

SELECT comment 
FROM COMMENTS 
WHERE (from_id = 1 OR from_id = 2) 
AND (to_id = 1 OR to_id = 2) 
ORDER BY date DESC 
LIMIT 1; 

, 당신은 where 절에이를 추가 할 수

AND NOT (from_id = to_id) 

들이 나타나 자신에게 메시지를 보낼 경우를 방지 할 수 있습니다. 이것은 사용자가 시스템에서 자신에게 메시지를 보낼 수 있다고 가정합니다. 사용자의 경우 1

+1

변경 'TOP 1'. –

+0

@ypercube 좋은 얼룩. 나는 세미콜론도 잊었다. 젠장, MS SQL Server가 내 머리를 썩어. –

+0

만약 내가 오직 1과 관련된 모든 코멘트를 질의하고 싶다면 반드시 2는 아닐 것입니다. 각 그룹의 최신 메시지로 그룹화 하시겠습니까? – numerical25

3

: 사용자 2의

SELECT comment 
FROM COMMENTS 
WHERE (from_id = 2 AND to_id = 1) 
ORDER BY date DESC 
LIMIT 0,1; 

:

SELECT comment 
FROM COMMENTS 
WHERE (from_id = 1 AND to_id = 2) 
ORDER BY date DESC 
LIMIT 0,1; 

절이는 메시지가 상대방과 그에게 두 당사자 중 하나에서 전송을 보장 할 필요가 "여기서" 그 반대의 경우에만 해당 사용자에게 메시지를 표시합니다. 다음 두 사용자에

는 두 가지의에서 최신 메시지를 표시 할 필요가있는 경우

: MySQL 용 'LIMIT 1'에

SELECT comment 
FROM COMMENTS 
WHERE (from_id = 1 OR from_id = 2) 
ORDER BY date DESC 
LIMIT 0,1; 
+0

하나의 사용자와 관련된 최신 메시지를 모두 선택하고 마지막으로 수신 또는 전송 한 메시지를 그룹화 할 수 있습니다. 예는 Google 이메일입니다. – numerical25

+0

예, "LIMIT 0,1"비트를 제거하고 적용 할 사용자 필터로 필터링하십시오. – ShaunOReilly

관련 문제