2010-11-17 107 views
2

我正在開發一個自定義論壇,並且想知道人們會認爲什麼是將線程標記爲已讀的最佳方法。將論壇帖子標記爲已讀?

我想顯示線程的帖子圖標,如果線程還沒有被讀取,它有一個未讀的圖標和主題標題爲粗體。如果已經閱讀,則主題標題是正常的字體重量,並且帖子圖標變爲讀取圖標。

最好的方法是在用戶會話中存儲他們已經查看的線程,並將其設置爲標記所有超過48小時左右的線程以讀取?

謝謝!

回答

2

創建第二個表,例如:

基本上特定於該部件和線程就可以去參加什麼那裏。當拉出線程列表時,LEFT JOIN針對該表。如果read_flag是0NULL,那麼它是新的。

SELECT * FROM thread t 
LEFT JOIN thread_member tm ON t.id=tm.thread_id AND tm.member_id=$member_id 
WHERE t.id=$thread_id 

每當有人在線程發佈消息,只需要運行這個查詢:

UPDATE thread_member SET read_flag=0 WHERE thread_id=$thread_Id 

posted_flag可以用來確定人在線程寫了一個消息。

bookmarked_flag可用於確定人員是否爲該線程添加書籤。

要保留表格修剪,您可以截斷所有沒有設置任何重要標誌的舊記錄。在本例中,您可以刪除沒有設置bookmark_flag的所有X日/周/月之前的記錄。

+0

雖然這似乎是一個明智的方式來做到這一點,我不知道是什麼您每次發佈帖子時都會對(可能)數百條記錄進行更新,而不是進行數據比較。你應該已經知道線程的最後一篇文章是什麼時候了 - 在我看來,你基本上只是用int來替換日期,但在這個過程中做了更多的工作。你真的在減少桌面尺寸嗎? – Dutchie432 2010-11-17 21:28:48

+0

一個公平的觀點,但我懷疑這樣做會有什麼重大的懲罰,因爲論壇的回覆可能不是很頻繁。 (另外,添加'AND read_flag = 1'會限制更新的次數。)我更喜歡這個標誌,因爲它與其他類型的數據相匹配(它甚至可以被壓縮成一個位域),同時準確地描述它的目的,但是如果有人我更喜歡時間戳,我不會反駁它。 – Matthew 2010-11-18 00:05:57

2

關閉我的頭頂,我會保留一個單獨的表,其中包含userId,threadId和lastVisted日期/時間。只需在用戶查看線程時添加/更新相應的userId/ThreadId記錄。

然後,當一個訪問者查看一個線程時,你知道在用戶的lastVistedDate是新的後發生的任何帖子,顯然,如果沒有LastVisted日期,你知道線程中的所有帖子都是新的。

2

保持日期時間的表中的用戶上次訪問線程

viewed_threads

列:USER_ID,thread_id單,日期時間

而且一定要保持的最後時間線進行了更新

軌道

當用戶打開一個線程

replace into viewed_thread (user_id, thread_id, datetime) values($user_id, $thread_id, now()) 

現在,當列出線程時,您可以檢查用戶會話中用戶上次訪問該線程的日期時間。如果最後觀看的日期時間是最後一次線程被更新之前那麼它的「新」

+0

擊敗我吧! :) – Dutchie432 2010-11-17 20:40:11

+0

其實我想你打我 – Galen 2010-11-17 20:40:30

+0

謝謝。不過桌子變得有點長了? – Cory 2010-11-17 20:43:57