构建好友“功能”的最佳方式是什么?
这就是我的想法:
假设我有一个包含以下列的用户表:user_id、用户名、密码...
以及一个包含 friend 姓名的表格,其中包含以下列:friend1、friend2、accepted。
如果 user2 添加了 user1,我希望 user2 显示在 user1 的个人资料上,user1 显示在 user2 的个人资料上...:O
这看起来有点困惑......有更聪明的方法吗?
最佳答案
CREATE TABLE (friend_id_a, friend_id_b, accepted)
定义约束:friend_id_a < friend_id_b
.
使用您的实体填充表,如下所示:
INSERT
INTO friend_friend(friend_id_a, friend_id_b)
VALUES (LEAST(@id1, @id2), GREATEST(@id1, @id2))
要选择一个人的所有 friend :
SELECT friend_id_b
FROM friend_friend
WHERE friend_id_a = @id
AND accepted
UNION ALL
SELECT friend_id_a
FROM friend_friend
WHERE friend_id_b = @id
AND accepted
此处的 UNION ALL 允许您使用索引并避免为了唯一性而进行额外排序。
以上所有内容对于作为对称和反反射关系的“友谊”都是有效的。这意味着:
如果a是b的好友,那么 b 是 a
的好友
a 从来都不是a的 friend
关于SQL友元函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/474843/