2014-10-29 89 views
0

举个例子,假设我希望用户成为网站上的朋友。连接来自同一个表的两行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) 

回答

0

我会去的少将两行一个连接人员A添加到人员B以及将第二连接人员B添加到人员A的空间高效方法。然后,单个列上的单个查询将检索所有朋友。

此设置也可用于“朋友”具有不同特权或友谊级别的地方。所以人A可以给B更多的访问他们的东西比B给予A.

+0

认为这可能是最好的方式来做到这一点..谢谢。 – Callombert 2014-10-29 16:12:47

0

你可以尝试不同的方法,存储一个人的所有朋友场内朋友在表和储存一切作为JSON对象。

这样你就可以在单个查询中拥有所有人的朋友,并且可以通过简单的foreach查询获得tehir配置文件。

我一直在使用这个几个多对多的逻辑,它的工作原理没有链接表的帮助。

0

我想我会喜欢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

(约使用预处理语句来代替,当然裸变量的适当警告)