2015-01-13 40 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以多種方式進行分組。即使是新的通知也可能會改變突發突發事件的羣體。

我在哪裏可以閱讀有關此問題的常見解決方案以及如何爲我的Web服務存儲和返回通知的更多信息?

+0

這個問題有點過於寬泛,我至少可以看到兩個不同的問題:1.如何存儲/查詢這樣的數據,2.如何將查詢結果發佈爲Web服務。此外,您的規格中缺少一些細節。應該分組多少條評論?或者我們可以搜索歷史多久?什麼是「新通知」? – 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或等效字段的格式;當適應我的解決方案。

相關問題