2015-01-13 2 views
3

Я использую фид в нем, некоторые уведомления должны отображаться как группа (т. Е. Пользователь отправил комментарий на ваше видео) и другие как автономные уведомления (ваше видео представлено на этой неделе) , Выделение новых уведомлений также требованиеКак группировать уведомления в фиде

Для сгруппированных уведомлений, когда пользователь консультируйтесь его кормить запись должна быть что-то вроде

Joe and other 5 posted a comment on your video "Cooking with fire" 

Проблема в том, как группировать события, когда уведомления перемежаются.

В примере, представьте себе следующий журнал:

1 min ago   Joe posted comment on video 1 
10 mins ago   Video 1 featured 
11 mins ago   Helen posted comment on video 1 
11 mins ago   Michael posted comment on video 1 
14 mins ago   David posted comment on video 1 
14 mins ago   Robert posted comment on video 1 

Подачу coud быть сгруппированы по нескольким направлениям. Даже новые уведомления могут изменять группы, нарушающие выделение.

Где я могу узнать больше об общих решениях этой проблемы и способах хранения и возврата уведомлений для моего веб-сервиса?

+0

Этот вопрос слишком широк, так как я вижу по крайней мере два разных вопроса: 1. Как хранить/запрашивать такие данные, 2. Как публиковать результат запроса в качестве веб-сервиса. Кроме того, некоторые детали отсутствуют в ваших спецификациях. Сколько комментариев нужно сгруппировать? Или как далеко назад мы будем искать историю? Что такое «новое уведомление»? – RandomSeed

+0

Комментарии должны быть сгруппированы разумным образом. Система должна сохранять историю для недавней активности, поэтому в примере 100 сгруппированных записей или 1 месяц будет нормально. Новое уведомление - новое событие в системе – Addev

ответ

0

Лично я хотел бы записать те уведомления, которые раз точно, а затем сделать что-то вроде этого (я не проверял эти конкретные решения, но сделали подобные вещи ранее):

Если вы хотите, чтобы уведомления сгруппированы по дата:

SELECT about_resource_id,DATE(notification_time) AS notification_date,COUNT(*) FROM notification_tbl GROUP BY about_resource_id,DATE(notification_time); 

по часам (с границами уточняющих по отношению к текущему времени), вы можете сделать это:

SELECT 
    about_resource_id, 
    TIMESTAMPDIFF(HOUR,NOW(),notification_time) AS hours_ago, 
    COUNT(*) 
FROM notification_tbl 
GROUP BY about_resource_id,TIMESTAMPDIFF(HOUR,NOW(),notification_time); 

Для уведомлений, сгруппированных другими способами, я хотел бы написать подходящую формулу в предложении GROUP BY.

Для указания того, кто в последний раз заметил, я хотел бы сделать что-то вроде этого:

SELECT 
    about_resource_id, 
    DATE(notification_time) AS notification_date, 
    SUBSTRING_INDEX(GROUP_CONCAT(counterparty_id,";"),";",1) AS last_commenter_id, 
    COUNT(*) AS commenters 
FROM notification_tbl 
GROUP BY 
    about_resource_id, 
    DATE(notification_time) 
ORDER BY notification_time DESC; 

Я использовал функцию MySQL конкретных GROUP_CONCAT() здесь, с функцией строки SUBSTRING_INDEX: Some alternative techniques for solving this problem with a JOIN/aggregate может быть трудно идеально подходит, потому что MySQL apparently does not support LIMIT within a subquery. Вам может потребоваться рассмотреть формат вашего commenter_id, commenter_name или эквивалентного поля; при адаптации моего решения.

Смежные вопросы