2011-03-05 52 views
0

我正在MySQL中建立一個數據庫,它將被PHP腳本訪問。我有一個表是活動流。這包括網站上發生的一切(遵循許多不同的事情,喜歡,upvoting等)。從這個活動流中,我將爲每個用戶運行一個算法,具體取決於他們的活動並顯示相關活動。我應該創建另一個表格來存儲每個用戶的活動,一旦該算法運行在活動上,或者每次用戶訪問該網站時,是否應該在活動表格上運行算法?哪種方法可以提供最快的頁面加載?

UPDATE:(這是什麼,除了上述以更容易理解的方式希望改寫)

我有一個數據庫表叫activity。每當用戶在網站上執行操作時,此表格會創建一個新行。

每次用戶登錄時,我將在表(activity)中的新行(自用戶上次登錄以來)運行算法,這些行適用於它們。例如,如果用戶正在關注在活動流中對帖子進行了upvoted的用戶,那麼當用戶登錄時將顯示帖子。我希望用戶能夠訪問之前應用到他們的內容。最簡單的方法是創建另一個表,保存已使用該算法運行的行,除了附加到單個用戶名之外? (一行可以適用於多個不同的用戶)

+0

如果您更改您的問題,這可能會有幫助... – cusimar9 2011-03-05 14:59:42

回答

0

我建議您在單獨的表格中跟蹤您的用戶特定activities,然後在登錄後可以更輕鬆地顯示與其相關的所有用戶活動。即。所以如果一個用戶對棒球和曲棍球有很大的興趣,你可以從他們最近的活動中檢索出來,然後到達你的所有活動表並從中獲取相關的項目。

1

我會從一個表和適當的索引開始。使用union語句,您可以執行多個查詢(使用不同的索引),然後將所有結果混合在一起。

舉個例子,假設你是用戶37,42和56的朋友,並且你對籃球和針織感興趣。並且,假設您有一個關於user_id的索引和一個關於主題的索引。這個查詢應該是相當高效的。

SELECT * FROM activity WHERE user_id IN (37, 42, 56) 
UNION DISTINCT 
SELECT * FROM activity WHERE subject IN ("basketball", "knitting") 
ORDER BY created 
LIMIT 50 
相關問題