私はブログプログラム(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
でしょうか。次に、9人のユーザーを検索し、重複を削除し、これを前に配置して、実行を続行する必要があります。しかし、問題は、8行しか表示されないことです。foo10
foo2
foo10
foo1
foo10
私が考えることができたこの問題の唯一の解決策は、次のようなデータベースを作成することでした。
-----------------------------
| id | username | who_visit |
-----------------------------
そして、それらを1行に入力する代わりに、訪問ごとに新しい行を追加します。
-----------------------------
| 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 |
-----------------------------
しかし、これには大量の不要なスペースが必要になります。
データベース内の1人のユーザーに50000を超える行を追加することなく、この問題を効率的に解決できる、見逃した方法はありますか?
更新:同じ問題を抱えている人のために、PM 77-1がコメントで以下に述べているように、新しい行が挿入されたときに最も古い重複行を削除することができます。このように、「data-bloat」を取得することはありません。