Я показываю статус сообщения, который отличается от каждого пользователя. Скажем, user1
отправляет сообщение в user2
, user1
, а затем устанавливает значение read
, а сообщение user2
- unread
. Он будет обновлен после того, как user2
нажмет сообщение.Отображение состояния сообщения: чтение и непрочитанное (отличается от других пользователей) в системе обмена сообщениями PHP/MySQL
Таким образом, в этих сценарии, сообщение user1
(от почтового ящика) будет иметь серый цвета шрифта, который указывает, что сообщение устанавливается на read
(с user1
это тот, кто посылает). С другой стороны, user2
имеют жирный шрифт, который указывает, что сообщение unread
.
Вот первая структура таблицы:
message(messageid, fromid, toid, message, timestamp, status)
Проблема здесь состоит в том, что если я обновлю статус сообщения на read
, она влияет на другую сторону (user2
). Так что я добавить еще один столбец, который будет установлен статус отличается от user1
и user2
:
message(messageid, fromid, toid, message, timestamp, from_status, to_status)
Здесь from_status
является для fromid
и to_status
для toid
. Но у меня возникла проблема с тем, как использовать эти значения для отображения состояния.
РНР код, который я использую во время моей первой попытки этот:
<?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», где роль «отправитель» или «получатель». Это позволит вам отправлять одно и то же сообщение нескольким людям и отслеживать каждый из их статусов индивидуально. – andrewsi