메시지가 포함 된 mysql 테이블이 있습니다.MySQL : 대화 목록 만들기 (user_id와의 마지막 메시지)
id (INT)
sender_id (INT)
recipient_id (INT)
sent_time (INT)
read_time (INT)
body (TEXT)
사용자 X가 다른 사용자에게 보낸 가장 최근 메시지 목록을 검색해야합니다.
다른 말로하면 주어진 사용자와 교환 된 마지막 메시지의 sent_time으로 정렬 된 다른 사용자와 전체 대화 목록을 만들고 싶습니다. 최종 결과 (PHP로 처리)는 다음과 같이됩니다.
array (
array (other_user_1_id, last_msg_sent_time, last_msg_is_read,
last_msg_is_to_me/from_me, number_of_messages*),
array (other_user_2_id, ...)
)
*) number_of_messages
은 옵션이지만 오히려 사용하기가 좋습니다.
질문 : 가장 효율적으로 어떻게합니까? 별도의 테이블 "대화"를 만들고 누군가가 메시지를 보내거나 읽거나 "메시지"테이블에 대해 정교하지만 단일 쿼리를 만들 때마다 업데이트합니까? 후자의 경우 쿼리는 어떻게 생겼을까요?
또는 세 번째 옵션의 변형 - 대화의 첫 번째 행의 ID가 포함 된 추가 열을 만듭니다. 이렇게하면 SELECT * WHERE sender_id = '$ uid'또는 recipient_id = '$ uid'GROUP BY first_id ORDER BY sent_date DESC를 수행 할 수 있습니다. 이봐, 더 나은 - 나는이 두 사용자 간의 대화에서 주어진 메시지의 연속 번호를 포함하는 또 다른 열을 추가 할 수 있습니다. 삭제가 없으면 꽤 잘 작동합니다.:) 그것에 대한 의견이 있으십니까? – Mike
그냥 삭제를 테이블을 업데이 트해야 ... 인덱싱이 CRUCIAL이 비록 매우 중요합니다 ... 내가 거래의 다량과 일을하고 그게 전부 도와 줬어 – parkman47
나는 인덱싱하지 않고도 그것에 대해 생각하지 않을거야 . 거대한, 거대한 차이, 나는 알고있다. :) 감사합니다. – Mike