Facebook과 같은 메시지 목록을 만들려고합니다. (1 행) 메시지를 SQL에서 메시지 목록 만들기
- 은 (역사)는 사용자의 대화에서 메시지를 마지막으로 만 표시 나는 쇼 광산을 보낼 때 내가 얻을 때
- 는 대답 쇼 대답
데이터베이스 데이터 :
SQL 쿼리
SELECT m.message_id, u.username, m.subject, m.message
, m.status, UNIX_TIMESTAMP(m.date) as date
FROM users u
LEFT JOIN messages m ON m.sender_id = u.id
WHERE m.message_id in (SELECT max(msg.message_id)
FROM messages msg
WHERE msg.receiver_id = 3
GROUP BY sender_id)
UNION
SELECT m.message_id, u.username, m.subject, m.message
, m.status, UNIX_TIMESTAMP(m.date) as date
FROM users u
LEFT JOIN messages m ON m.receiver_id = u.id
WHERE m.message_id in (SELECT max(msg.message_id)
FROM messages msg
WHERE msg.sender_id = 3
GROUP BY receiver_id)
GROUP BY u.username
ORDER BY date DESC
내가 보낸 모든 메시지를 수신하려고 (내 ID = 3) 사용자 이름
SQL 결과가 나와 그룹에 전송 된 모든 :
Array
(
[0] => Array
(
[message_id] => 10
[username] => 8888
[subject] => без темы
[message] => 555
[status] => 0
[date] => 11 August 2012, 2:22
[user_image] => http://127.0.0.1/auth_system_1/upload_images/65_empty.jpg
)
[1] => Array
(
[message_id] => 7
[username] => 8888
[subject] => hi
[message] => 333
[status] => 0
[date] => 11 August 2012, 2:15
[user_image] => http://127.0.0.1/auth_system_1/upload_images/65_empty.jpg
)
[2] => Array
(
[message_id] => 4
[username] => 6666
[subject] => Тема
[message] => 2
[status] => 0
[date] => 11 August 2012, 2:02
[user_image] => http://127.0.0.1/auth_system_1/upload_images/65_empty.jpg
)
[3] => Array
(
[message_id] => 1
[username] => fffffffff
[subject] => privet
[message] => tttt
[status] => 0
[date] => 11 August 2012, 1:38
[user_image] => http://127.0.0.1/auth_system_1/upload_images/65_empty.jpg
)
)
로 GROUP BY
사용자 이름이 작동하지 않는 것을 볼 수 있습니다. 그것은 3-> 7과 7-> 3을 보여 주지만 7-> 3은 대답과 마지막 메시지였습니다. 왜 그룹이 작동하지 않는지 모르겠다. 어쩌면이 문제를 해결하는 더 쉬운 방법을 통해 나를 도울 수 있습니까? > 1
그래서, SQL이 있어야합니다 "SENDER_ID = 3", "receiver_id = 3"내 테이블 데이터 결과에서
- MESSAGE_ID해야합니다 -> 10
SQL 질문이있는 경우 멋진 http://sqlfiddle.com/에서 수정할 수있는 테스트 케이스를 준비 할 수 있습니다. – biziclop