2012-04-14 74 views
2

我想存儲和檢索社區站點的用戶通知數據。當有人對用戶的帖子發表評論或某人關注用戶時,應該生成通知。我想要這個行爲來複制Facebook的通知。因此,它應該是這樣的:用於存儲和檢索通知數據的數組設計

User A, User B and 3 other started following you. 
User A, User Z and 2 others commented on your post Super Duper. 

如果我創建一個通用的陣列,用於保持通知那麼它應該是這樣的:

$notification = array ($notification_id, notification_time, $read_status, $notification_recipient_id, $notification_initiator_id, $post_id=NULL, $comment_id=NULL); // This array represents a single notification 

$notifications = array ($notification, ...); // This array is made up of many single notification array. 

所以,如果我是來檢索$通知的數據數組(包含所有單個通知數組的數組),我將使用for循環並在根據時間對數組進行排序後回顯結果。這會給我這樣的事情作爲結果:

User A started following you. 
User B started following you. 
User C started following you. 
User D started following you. 
User E started following you. 
User A commented on your post Super Duper. 
User B commented on your post Super Duper. 
User C commented on your post Super Duper. 
User D commented on your post Super Duper. 

所以,如果你看一下結果,我打算做到,而且我會走出陣列設計我公司目前擁有的一個,這兩個是不同的。我可以通過執行N個操作來達到所需的結果,這些操作可能涉及到$ notifications數組的扁平化,循環遞歸,排序等。但是,我想我可以通過重新設計數據如何存儲在陣列中來減少開銷,以便在需要檢索數據時我可以執行的操作數量最少。另外,由於在顯示數據時需要考慮讀取狀態,因此實現我想要的結果將變得更加複雜。我請求提供關於設計數組結構的建議,以及如何從數組中檢索數據以獲得我想要的結果的示例。

回答

1

你可以做如下因素:

  • 選擇類型的通知 '以下',其中READ_STATUS = 'not_read',限制2
  • 數類型的通知 '以下'
  • 選擇類型 '評論',其中READ_STATUS = 'not_read',LIMIT 2
  • 計數類型的通知的通知 '評論'

每當有人讀取通知時,都將其設置爲「讀取」。

每當有人評論或跟隨某件事時,您都會爲所有相關人員創建通知。例如,那些人是參與討論的所有人,或者只是被回答的人。同樣的事情發表評論。

這樣,您可以格式化並顯示此消息,而不會操縱太多的數據。 (你可以打包這些請求以提高效率,但你明白了)

用戶A,用戶B和其他3人開始關注你。
用戶A,用戶Z和2 其他人對您的文章Super Duper發表了評論。

我會說改變你的數據結構,像這樣的問題是矯枉過正。採用這種方法,您將不斷重新定義您的數據模型,這將很快成爲一場噩夢。數據模型應該反映你的應用程序的大的限制,而不是像這樣的「小」格式化的問題。

+0

Thx for the reply。是的,數據模型應該反映約束而不是格式化問題。但是,該應用程序目前正在開發中,並且不包含有意義的數據。所以,現在我可以正確地構建它。您的建議可以用於跟蹤。然而,帶有註釋的變量$ post_id被引入。每篇文章可以有不同的人評論導致嵌套。當用戶讀取通知以及新用戶評論或關注時,我還需要設置/取消設置閱讀狀態。你能否考慮這些並據此提出建議。謝謝。 – John 2012-04-14 21:20:31

+0

更新了我的答案。我的觀點是要表明,用你現在的模型,你可以處理很多案例。保持你的數據模型簡單。 – 2012-04-14 21:33:49

+0

現在我明白你的意思了。起初,我認爲你指的是陣列,正如我在問題中所問的那樣。但是我現在看到你的建議是直接向數據庫傳遞SQL語句。我會在此寫一個工作代碼並在一天或兩天內回覆給您。同時,我將留下標記爲未答覆的問題。 Thx的擡頭。 – John 2012-04-14 21:36:53

相關問題