0
그래서 두 테이블 chats
및 chats_reply
이 있습니다. 구조는 다음과 같습니다.마지막 메시지 가져 오기 회신
채팅
--------------------------------------------------
| chat_id | user_one | user_two | created_at
--------------------------------------------------
| 1 | 1 | 2 | something here
--------------------------------------------------
chats_reply 내 쿼리와 약간의 문제가 있어요
-------------------------------------------------------------------------
| chatReply_id | chat_id | user_id | reply | created_at
-------------------------------------------------------------------------
| 1 | 1 | 1 | Message 1 | something here
-------------------------------------------------------------------------
| 2 | 1 | 2 | Message 2 | something here
-------------------------------------------------------------------------
. 내 user_id가 1이라고 가정 해 봅시다. 보낸 마지막 메시지가있는 모든 채팅 목록을 반환하고 싶습니다. 이미 모든 채팅 내용을 나열하는 쿼리가 있지만 대화의 첫 번째 메시지를 반환하는 마지막 메시지를 반환하지 않습니다. 문제는 나는 그것이 Message 2
을 반환 할 때이 chats_reply
테이블에서 Message 1
돌려 주어,
SELECT
chats.chat_id,
chats.created_at AS ChatTime,
chats_reply.reply,
chats_reply.created_at AS ReplyTime,
chats_reply.status,
users.name,
users.last_name,
users.email
FROM chats
INNER JOIN chats_reply
ON chats.chat_id = chats_reply.chat_id
INNER JOIN users
ON users.user_id =
CASE
WHEN chats.user_one = '1'
THEN chats.user_two
WHEN chats.user_two = '1'
THEN chats.user_one
END
WHERE chats.user_one = '1' OR chats.user_two = '1'
GROUP BY chats_reply.chat_id
ORDER BY chats_reply.chatReply_id DESC
이 쿼리는 내가 기대했던 모든 것을 반환이 내 쿼리입니다. 어떤 도움이라도 대단히 감사합니다.
고마워요! 그것은 효과가 있었다. 그러나 귀하의 질의에 'WHERE' 부분을 설명해주십시오. 다시 한번 감사드립니다. –
@ ExoSkeleton321. . . 단지 각 채팅에 대해 가장 최근의'chatReply_id'를 선택합니다. 이것이 상관 관계가있는 하위 쿼리가 작동하는 방식입니다. –
흠, 더 살펴 보겠습니다. 고마워요! –