[英]Linking two rows from same table MYSQL
例如,假设我希望用户成为该网站上的朋友。
假设user_id 1和user_id 2成为朋友,我在表的朋友中添加了一行:表的朋友(user_id1 INT,user_id2 INT),该表的问题是我必须查询每列以获取结果。
行可能是:
user_id1 user_id2
1 2
2 3
因此,要结识ID为2的用户,我需要同时查询两列(这会使一些查询不太实际),是否有更好的方法呢?
ie:
$u_id = 2;
SELECT * FROM friends WHERE (user_id1 = $u_id OR user_id2 = $u_id)
您可以尝试另一种方法,将一个人的所有朋友存储在表中的字段朋友中,并将所有内容存储为json对象。
这样,您可以在一个查询中拥有一个人的所有朋友,并且可以通过简单的foreach查询获得个人资料。
我已经将其用于几种多对多逻辑,并且在没有链接表的情况下它可以完美地工作。
我想我更喜欢UNION
,例如:
SELECT user, friend FROM ( SELECT user_id1 AS user, user_id2 AS friend FROM friends UNION SELECT user_id2 as user, user_id1 AS friend FROM friends ) u WHERE u.user = $u_id
(当然要注意有关使用准备好的语句而不是裸变量的警告)
我会选择一种节省空间的方法,即添加两行,第一行将人A链接到人B,第二行将人B链接到人A。然后在单列上执行单个查询将检索所有朋友。
当“朋友”具有不同的特权或友谊级别时,也可以使用此设置。 因此,与B给A相比,人A可以给B更多的访问权限。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.