我有一個博客程序(類似Twitter),我目前正在製作一個最近訪問的框,其中包含最近訪問過您的頁面的9個人。什麼是存儲和顯示最近訪問他人頁面的人最有效的數據庫方式?
每個人都使用不同的用戶名註冊。
什麼我目前得到的是這樣的數據庫:
:-----------------------------
| id | username | who_visit |
-----------------------------
例如,如果9個用戶foo1
到foo9
訪問foo10
的頁面,該數據庫將與行填充
------------------------------------------------------------------------
| id | username | who_visit |
------------------------------------------------------------------------
| 1 | foo10 | foo1, foo2, foo3, foo4, foo5, foo6, foo7, foo8, foo9 |
------------------------------------------------------------------------
然後當foo11
訪問foo10
的頁面,我會從字符串的結尾去掉foo9
,並添加foo11
前面。
但現在的主要問題是,如果foo1
訪問foo10
的頁面,然後foo2
參觀foo10
的頁面,然後foo1
再次訪問foo10
的頁面?然後,我將不得不搜索9個用戶,刪除任何重複項,將其放在前面,然後繼續執行。但問題是,那麼它只會顯示8行。
唯一的解決這個問題,我能想到的是使數據庫這樣的:
-----------------------------
| id | username | who_visit |
-----------------------------
而不是在一排填充它們,我想補充一個新的行爲每一位光臨:
-----------------------------
| id | username | who_visit |
-----------------------------
| 1 | foo10 | foo1 |
-----------------------------
| 2 | foo10 | foo2 |
-----------------------------
| 3 | foo10 | foo3 |
-----------------------------
| 4 | foo10 | foo4 |
-----------------------------
| 5 | foo10 | foo5 |
-----------------------------
| 6 | foo10 | foo6 |
-----------------------------
| 7 | foo10 | foo7 |
-----------------------------
| 8 | foo10 | foo8 |
-----------------------------
| 9 | foo10 | foo9 |
-----------------------------
但是這樣會佔用大量不必要的空間。
有沒有一種方法我錯過了,它可以有效地解決這個問題,而不需要爲數據庫中的一個用戶添加> 50000行?
更新:對於那些具有相同問題的人,如下面在註釋中所述的PM 77-1,可以在插入新行時刪除最早的重複行。這樣,你不會得到'數據膨脹'。
如何分割的邏輯:如果訪問者已經在列表上,則代替他/她最早 – 2013-03-10 00:29:51
@ PM77-1哎,爲什麼我沒有想到這一點。 – think123 2013-03-10 00:30:44
我將它擴展爲答案。 – 2013-03-10 00:37:08