Я заново создаю систему уведомлений, чтобы сделать ее способной объединять множество уведомлений. Вместо того, чтобы показывать 9 строк, которые говорят: «Адам ответил на ваш вопрос», он мог сказать: «9 человек ответили на ваш вопрос».
Моя текущая таблица уведомлений выглядит так:
notification_id (PK) | recipient_id | sender_id | type | foreign_id | date | viewed
Recipient_id – это тот, который получает уведомление. Sender_id – это тот, из которого он пришел. Тип – это какое уведомление, поэтому я знаю, что он должен сказать, «xx ответил» или «xx понравился ваш пост». Foreign_id может быть идентификатором вопроса.
Какой был бы лучший способ создать эту «комбинированную» систему? Должен ли я обновлять уведомление, когда есть новый ответ, и сказать, что ответил другой человек, или если запрос может подсчитать, сколько из них имеет тот же foreign_id. Как вы думаете?
Попробуй это:
SELECT foreign_id, SUM(IF (TYPE= 'like', 1, 0)) likecnt, SUM(IF(TYPE = 'answer', 1, 0)) anscnt FROM notification GROUP BY foreign_id
EDIT: проверьте это.
SELECT n.foreign_id, n.sender_id FROM notifications n INNER JOIN (SELECT foreign_id, MAX(DATE) DATE FROM notifications GROUP BY foreign_id, user_id ) a ON n.foreign_id = a.foreign_id AND n.date = a.date