Необходимо реализовать доставку общедоступных сообщений для всех пользователей и личных сообщений.
Упрощенные таблицы:
messages
+---------------+---------------------------+
| Field | Type |
+---------------+---------------------------+
| id | int(10) unsigned |
| admin_id | int(10) unsigned |
| type | enum('public','targeted') |
| subject | text |
+---------------+---------------------------+
messages_read_status
+----------------+---------------------------------+
| Field | Type |
+----------------+---------------------------------+
| id | int(10) unsigned |
| message_id | int(10) unsigned |
| user_id | int(10) unsigned |
| status | enum('unread','read') |
+----------------+---------------------------------+
При отправке общедоступных сообщений - в messages_read_status записи таблицы не созданы.Для целевых сообщений - создание записи с непрочитанным статусом.Когда сообщение читается пользователем - настройка read status.
Два фильтра на стороне клиента - Read / Unread.Сообщение тип не имеет значения для пользователя.
Основная задача - создать запрос для запроса прочитанных или непрочитанных сообщений для пользователя независимо от типа сообщения.
Основная проблема заключается в обработке запроса запроса для открытых непрочитанных сообщений, поскольку в них не может быть записей в messages_read_status .UNREAD-запрос работает правильно, пока какой-то пользователь читает сообщение.Затем создается новая запись в messages_read_status , и другие пользователи больше не могут видеть это сообщение.Эту ситуацию я не могу разрешить.Запрос READ работает правильно.
SELECT messages.* FROM messages
LEFT JOIN messages_read_status
ON messages.id = messages_read_status.message_id
WHERE
{OTHER FILTERS} AND
(messages_read_status.`id` IS NULL OR (messages_read_status.`user_id` = $user_id AND messages_read_status.`message_status` = '$message_status'))
samlpe sql - http://sqlfiddle.com/#!2/d940d
Спасибо