继续这个问题,
在我的网络应用程序中,我希望允许用户添加朋友,例如 facebook,在我之前的问题中,我最终决定使用 @yiding 所说的数据库结构:
我会去规范化关系,使其对称。也就是说,如果 1 和 2 是朋友,我将有两行 (1,2) 和 (2,1)。
缺点是它的大小是两倍,并且在建立和破坏友谊时必须进行 2 次写入。优点是您的所有读取查询都更简单。这可能是一个很好的权衡,因为大多数时候你是在阅读而不是写作。
这还有一个额外的好处,如果您最终超出了一个数据库并决定进行用户分片,您不必遍历所有其他数据库分片来找出一个人的朋友是谁。
所以,现在如果用户 1 添加用户 2,用户 5 添加用户 2,类似这样的内容将进入数据库:
ROW_ID USER_ID FRIEND_ID STATUS
1 1 2 0
2 2 1 0
3 5 2 0
4 2 5 0
如您所见,我们首先插入“ REQUEST SENDER ”行,所以现在假设用户5
已登录,我们想向他显示友谊请求,这是我的查询:
$check_requests = mysql_query("SELECT * FROM friends_tbl WHERE FRIEND_ID = '5'");
上面的查询,将获取 ROW_ID = 4,这意味着上面的查询显示用户 2 添加了 5,但他没有,实际上用户 5 添加了用户 2,所以这里我们不应该显示用户 5 的任何友谊请求,相反我们需要为用户 2 显示它。
我应该如何正确检查这个?