Създавам система за съобщения за CMS и не мога да намеря начин да получа броя на непрочетените съобщения във верига от съобщения.
Имам нужда от начин да разбера дали основното съобщение или някое от съобщенията за отговор са непрочетени.
Имам таблица, наречена „съобщения“, която има полетата: id, active[1,0], subject, message, datetime, user_from, user_to, reply, viewed, removed
Когато се прочете съобщение, съхранявам този потребителски идентификатор, разделен със запетая, в полето за преглед: ,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