我正在为学校使用 PHP 开发 Twitter 克隆,但我遇到了一个主要问题。我找不到实现追随者系统的方法。有一个用户表,我想添加一个字段来保存每个用户关注的所有用户的 id。
我应该用逗号分隔 id,然后在 PHP 中将它们分开吗?然后我需要从推文表中选择所有用户关注者发布的推文。有我可以使用的 SQL 命令吗?类似的东西
SELECT *
FROM tweets
WHERE author='$followeduser'"
但是$followeduser
多个ID在哪里。
有一张USER_MASTER
这样的桌子
USER_ID (int)
USER_NAME(varchar(50))
创建一个USER_FOLLOWERS
这样的表
USER_FOLLOWER_ID // Auto increment-Primary Key for this record
USER_ID (int) // foriegn key to UserId column in USER_MASTER table
FOLLOWER_ID (int) // foriegn key to UserId column in USER_MASTER table
将 UserId 存储在第一列,并将关注该用户的 User 的 UserId 存储在该Follower_ID
列中。
所以你的数据看起来像这样
USER_ID USER_NAME
--------------------------------------
1 SCOTT
2 JARED
3 MARC
4 ERIC
USER_FOLLOWER_ID USER_ID FOLLOWER_ID
--------------------------------------
1 1 2
2 1 3
3 1 4
4 2 1
所以这意味着,用户 Scott 有 3 个关注者,Jared、Marc 和 Eric。用户 JARED 有一个追随者,即 SCOTT
要获取用户的关注者列表(例如:Scott (ID=1)),您可以在这两个表之间进行连接
SELECT U. USER_ID, U.USER_NAME From USER_MASTER U
INNER JOIN USER_FOLLOWERS UF ON U.USER_ID=UF.FOLLOWER_ID
WHERE UF.USER_ID=1 // 1 is the ID of SCott
制作一个连接表。
将所有 ID 放在一个列表中并不是规范化的方式,并且会导致许多问题。
有一个关系表,其中有一列称为用户,第二列在后面。因此,如果用户 1 关注用户 3 和 5,那么您将拥有一个主目录,其中用户 = 1 关注 = 3,用户 = 1 关注 = 5(使用您想要的任何 ID)。你也有你的推文表,你可以在其中存储所有推文。您将要进行一个连接两个表的查询