Я создаю систему обмена сообщениями для CMS и не могу найти способ получить количество непрочитанных сообщений в цепочке сообщений.
Мне нужен способ узнать, не прочитаны ли основное сообщение или ответные сообщения.
У меня есть таблица под названием «сообщения», в которой есть поля: идентификатор, активный [1,0], тема, сообщение, дата и время, user_from, user_to, ответ, просмотр, удаление
Когда сообщение прочитано, я сохраняю идентификатор пользователя с разделителями-запятыми в просматриваемом поле: ,3,4,12,
Затем, чтобы узнать, просматривался ли он, я ищу идентификатор отправителя следующим образом:
m.viewed LIKE '%,$user_id,%'
Я просто выясняю, как включить эту логику в этот выбор SQL, чтобы я мог видеть, должно ли родительское сообщение быть помечено как непрочитанное. Следующий SQL отлично работает и захватывает все сообщения и количество ответов и упорядочивает их по дате и времени.
SELECT m.*, COUNT(*) AS num_replies, MAX(r.datetime) AS max_datetimeunread_replies
FROM directus_messages AS m
LEFT JOIN directus_messages as r
ON m.id = r.reply
WHERE m.active = '1'
AND m.removed NOT LIKE '%,$user_id,%'
GROUP BY m.id
HAVING m.reply = '0'
ORDER BY datetime DESC, max_datetime DESC
Любая помощь будет принята с благодарностью... Я не могу обдумать это!
viewed
иremoved
? Что происходит, когда более 100 пользователей просматривают сообщение? Вам действительно следует попробовать нормализовать таблицу, а не использовать поля с разделителями-запятыми. - person ypercubeᵀᴹ   schedule 23.03.2011