我有一个博客程序(类似于 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 所述,可以在插入新行时删除最早的重复行。这样,您就不会得到“数据膨胀”。