2011-09-13 7 views
3

PHP MySQL의 표 : 메시지PHP MySQL의 그룹화 및 주문 사용자 메시지 함께

id sender receiver  time_sent   Message SendDel RecDel 
1  1   3  2011-08-17 14:00:00  [text]  0  0 
2  3   1  2011-08-17 15:00:00  [text]  0  0 
3  2   4  2011-08-18 14:19:28  [text]  1  0 
4  4   2  2011-08-18 15:19:28  [text]  0  0 

목적은 높은 값의 메시지 (MAX) 및 그룹 발신자에 기초하여 상기 메시지 수신부를 검색하는 것이다. 따라서 메시지 ID 1과 2는 함께 그룹화되고 ID 3과 4는 함께 그룹화됩니다.

예 : 사용자 ID 로그인은 = 2

id sender receiver  time_sent   Message SendDel RecDel 
4  4   2  2011-08-18 15:19:28  [text]  0  0 

임 이유는 확실하지를 반환해야하지만 내 쿼리는 함께하지 그룹 모든 메시지를 않습니다. 내 질문은 다음과 같습니다.

SELECT id, sender, receiver, MAX(time_sent), MAX(message) 
FROM Messages 
WHERE sender='$userid' OR receiver = '$userid' 
Group By sender,receiver 
Order BY time_sent DESC 

모든 솔루션?

답변

5

당신이 원하는 :

그래서 메시지 ID의 1, 2 것 그룹화 및 ID의 3, 4 것 그룹화.

이렇게하려면 그룹 by 절에서 마술을해야합니다.

SELECT id, sender, receiver, MAX(time_sent), MAX(message) 
FROM Messages 
WHERE sender='$userid' OR receiver = '$userid' 
Group By (if(sender > receiver, sender, receiver)) 
     , (if(sender > receiver, receiver, sender)) 
Order BY time_sent DESC 
+0

두 번째 if 문'(송신자가 = 수신자, 수신자, 발신자 인 경우)'이 아닙니까? – psycho

+0

@Johan : 귀하의 쿼리가 작동하지 않았습니다. 내 질문에 문제가 있다고 생각합니다 : >>>> "보낸 사람>받는 사람, 보낸 사람,받는 사람 인 경우) , (보낸 사람이 = 수신자, 보낸 사람,받는 사람 인 경우)" – Bourne

+0

@Bourne. – Johan