나는 테이블을 가지고 : messages
이 구조 :선택 별개의 기록은
`ID` // auto increment
`SenderUserID` // foreign key: `ID` from `User` table
`ReceiverUserID` // foreign key: `ID` from `User` table
`Message`
`DateCreated` // timestamp
나는이 조건 테이블 구별 ReceiverUserIDs을 얻을 필요가
:
- 보낸 사람 사용자는 수신자 사용자와 대화해야합니다.
- 고유 한
ReceiverUserID
을 선택하면 마지막으로DateCreated
메시지를 보내야합니다.
결과에서 사용자가 만든 마지막 대화는 DESC 생성 일순으로 정렬됩니다.
mysql이 첫 번째 레코드를 반환하지만, 선택된 ReceiverUserID가 결과 상단에 최대 값을 얻으려면 최대 값 DateCreated
이 필요합니다.
SELECT DISTINCT `m`.`ReceiverUserID` AS `ID` FROM `messages` `m`
WHERE (`m`.`SenderUserID` = :UserID OR `m`.`ReceiverUserID` = :UserID)
ORDER BY `m`.`DateCreated` DESC
//:UserID means LogedInUserID
페이스 북 메시지 게시판과 정확히 일치합니다.
ID, SenderUserID, ReceiverUserID, Message, DateCreated
1, 12, 11, 'Hi admin', 2012-10-24 11:07:00
2, 11, 12, 'Hi guy', 2012-10-24 11:08:00
3, 11, 13, 'Hello dear customer', 2012-10-24 11:12:00
4, 11, 13, 'Are you there?', 2012-10-24 11:13:00
5, 13, 11, 'Hiiii', 2012-10-24 11:14:00 // last conversation betwen 11 & 13
현재 logedin 사용자 ID : 11
SELECT `m`.`ReceiverUserID` AS `ID`, MAX(`m`.`DateCreated`) as `lastmsg`
FROM `messages` `m` WHERE (`m`.`SenderUserID` = 11 OR `m`.`ReceiverUserID` = 11)
GROUP BY `m`.`ReceiverUserID`
우리는이 부분에 문제가 : 그것은 수신기 사용자가 보낸 메시지를 대답 (11) 및 (13) 사이에 우리의 마지막 대화를 반환하지 않습니다 결과에 표시되지 않습니다.
결과 :
ID, lastmsg
12, 2012-10-24 11:08:00
13, 2012-10-24 11:13:00 // Should be: 13, 2012-10-24 11:14:00
좋은 생각 인 것 같지만 문제는 아직 해결되지 않았습니다. 질문에 대한 새로운 세부 정보를 참조하십시오. – hallaji
가 변경되면 수신자와 수신자를 구분해야합니다. – JaMaBing
잘 했어! 내가 생각하는 실수가있다 : 첫 번째 : GROUP BY'm'.ReceiverUserID' 두 번째이어야합니다 : GROUP BY'm'.SenderUserID' 이 방법으로 내 솔루션을 얻었다. 고마워요 – hallaji