我正在 MySQL 中发展友谊关系,其中朋友关系是相互的。如果 A 是 B 的朋友,则 B 是 A 的朋友。如果其中一个用户结束友谊,则关系下降。我想知道哪种方式更好。
我有一个正在运行的系统;
user
-----------
userid p.k
name
friends
-------
userid
friendid
primary key (`userid`,`friendid`),
key `friendid` (`friendid`)
1 2
2 5
1 3
To get all of my friends;
SELECT u.name, f.friendid , IF(f.userid = $userid, f.friendid, f.userid) friendid
FROM friends f
inner join user u ON ( u.userid = IF(f.userid = $userid, f.friendid, f.userid))
WHERE ( f.userid = '$userid' or f.friendid = '$userid' )
Run Code Online (Sandbox Code Playgroud)
此查询运行良好。也许我可以添加一个UNION
. 查询比下面的更复杂,并且该表包含的记录数是下面的一半。
另一种方法是将关系保持在不同的行中; …