2011-01-28 50 views
3

我即將在我的論壇中實現主題/參數列表,並且我想爲每條消息插入一種類似「讀/尚未讀」的標誌,並將每個用戶都放在我的網站中。MySql:我如何實現一種「讀/尚未讀」主題?

我認爲這樣的事情:表watched_topicsid(INT), user(VARCHAR)topic_id(INT)。當一個user看這個頁面時,我會插入(如果數據不存在)這些信息。

當另一個user將在主題中插入新消息時,我將從表watched_topics中刪除所有與topic_id一致的行。

,可以提供一個麻煩:想想看9000主題9000用戶已看過所有主題:表會這麼大(9000x9000 = 8100)。

所以,我認爲不是實施這種東西的最佳策略!任何建議,將不勝感激:)

乾杯

回答

3

你的建議聽起來不錯。我會讓用戶字段也是一個外鍵 - 它給你更多的靈活性。

是否確定所有9000用戶都讀取了所有9000個主題?我的意思是這個現實?就像你說的那樣,當添加新消息時,主題條目將被刪除。當發生這種情況時,另外9000條目被刪除:)

我會索引表和去你的建議(與user_id變化)。如果表格大小不變,您可以隨時更改實施。無論如何,這絕不是問題。

+0

嚴正耶,但每次刪除81000000條記錄(例如)的表中的9000條目是浪費資源:)而且,'user_id(INT)'將更具性能:) – markzzz 2011-01-28 11:06:42

4

我可以提出一種不同的方法嗎?

利用網頁瀏覽器歷史機制。

每次添加新消息時,每個主題都可以獲取新的唯一URL。它可能包括消息的數量,上次修改時間或兩者的組合。

如果用戶確實看到該主題,他肯定已經訪問過它,所以正確設置的CSS可以幫助識別讀取的主題。你甚至可以使用一些客戶端腳本來修改頁面的行爲。


另一種方式來做到這一點會保持關注的話題表要做到這一點,而且最後訪問時間保存在用戶的配置文件,並顯示所有主題爲已讀,由於還沒有改變時間。


但是,假設讀取所有主題的所有用戶都不太可能是非常安全的。

+0

我喜歡這種方法:「另一種方法是按照您希望的方式保留觀看的主題表格,並將最後一次訪問時間保存在用戶個人資料中,並將所有主題顯示爲自從那時起未更改的所有主題。」這樣你不必刪除9000條目:) - 只需比較時間戳。 – hade 2011-01-28 11:19:13

+0

謝謝。 :)這實際上是我在10年前寫的論壇腳本中所做的。現在我會使用瀏覽器歷史記錄方法和時間戳來完成它,可能會使客戶端完全處理讀取主題的外觀。這可以緩存服務器上的主題列表並減少數據庫負載(如果這種情況成爲問題)。 – macbirdie 2011-01-28 11:35:35

1

刪除:您可以保存用戶看到的最新的msg-ID。這樣,每次將消息發佈到觀看次數較多的主題時,您都不必執行大量的刪除操作。