각 사용자마다 다른 메시지 상태가 표시됩니다. user1
이 user2
으로 메시지를 보내면 user1
의 메시지 상태는 read
으로 설정되고 user2
의 메시지는 기본적으로 unread
으로 설정됩니다. user2
메시지를 클릭하면 업데이트됩니다.메시지 상태 표시 : PHP/MySQL 메시징 시스템의 읽기 및 읽지 않음 (다른 사용자와 다름)
그래서 이러한 시나리오에서, (받은 편지함에서) user1
의 메시지는 (user1
가 보내는 하나이기 때문에) 메시지가 read
로 설정되어 있음을 나타냅니다 회색 색상의 글꼴을해야합니다. 다른면에서 user2
은 메시지가 unread
임을 나타내는 굵은 글꼴을 가지고 있습니다.
message(messageid, fromid, toid, message, timestamp, status)
여기서 문제가 나는 read
에게 메시지 상태를 갱신하는 경우, 그 다른 쪽 (user2
)에 영향이다
여기 테이블의 첫 번째 구조이다. 여기
message(messageid, fromid, toid, message, timestamp, from_status, to_status)
는 from_status
는 fromid
위한 것이며 to_status
는 toid
입니다 : 그래서 user1
및 user2
다르게 상태를 설정합니다 다른 열을 추가합니다. 하지만이 값을 사용하여 상태를 표시하는 방법에 문제가 있습니다.
내가 처음으로 시도하는 동안 사용하는의 PHP 코드는 다음과 같습니다
이<?php
$id = $_SESSION['id'];
$query = mysql_query("SELECT m.* FROM message m
LEFT JOIN message m2 ON (
(m.fromid=m2.fromid AND m.toid=m2.toid) OR
(m.fromid=m2.toid AND m.toid=m2.fromid)
) AND m.timestamp<m2.timestamp
WHERE (m.fromid='$id' OR m.toid='$id') AND m2.toid IS NULL ORDER BY timestamp DESC");
while ($message = mysql_fetch_array($query)) {
if ($message['status'] === 'unread') {
// bold font style will be applied
}
else {
// gray-colored font will be applied
}
}
?>
(쿼리 최신 대화로 모든 사용자가 각 대화를 가져옵니다.)
이 코드는 잘 동작 주 사용자는 user1
이지만 다른 쪽에서는 user2
에서받은 메시지가 read
또는 unread
으로 설정되어 있음을 확인합니다.
그래서 수정 된 테이블에서 각 사용자 당 2 개의 개별 status
을 사용하여 수행 할 작업에 문제가 있습니다. 어떻게해야합니까?
상태를 읽지 않은 상태로 다시 설정하는 옵션이 있습니까? 그렇지 않으면 메시지를 보는 사람이 보낸 사람인 경우 메시지를 읽은 다음받는 사람이 읽었는지 여부를 추적하는 단일 상태 필드가 있다고 가정 할 수 있습니다. – andrewsi
좀 더 나은 해결책으로 필드의 이름을'sender_status'와'recipient_status'로 바꿉니다. 어떤 메시지인지 확실합니다. 지금 누가 메시지를 읽고 있는지에 따라 적절한 메시지를 수정하십시오. – andrewsi
좀 더 우아한 해결책을 원하면, 데이터베이스에 'usedID', 'status'및 'role'과 같은 필드가있는 메시지 수신자를위한 새 테이블이 있습니다. 여기서 role은 'sender'또는 recipient '입니다. 그러면 여러 사람에게 동일한 메시지를 보내고 각 상태를 개별적으로 추적 할 수 있습니다. – andrewsi