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 절에 적합한 수식을 작성합니다. 여기 MySQL의 특정 GROUP_CONCAT() 함수를 사용했습니다

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; 

, 문자열 기능 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 또는 이와 동등한 필드의 형식을 고려해야 할 수도 있습니다. 내 솔루션을 채택 할 때.