从同一个表MYSQL链接两行

时间:2014-10-29 15:48:18

标签: php 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)

3 个答案:

答案 0 :(得分:0)

你可以尝试一种不同的方法,将一个人的所有朋友存储在表中的朋友字段中,并将所有内容存储为json对象。

通过这种方式,您可以在一个查询中拥有所有一个人的朋友,并且您可以使用简单的foreach查询获取tehir个人资料。

我已经将它用于多个多对多逻辑,并且无需链接表即可完美运行。

答案 1 :(得分: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

(关于使用预备语句而不是使用裸变量的适当注意事项)

答案 2 :(得分:0)

我会选择空间效率较低的方法来添加两行,一个将人A链接到人B,将第二个链接人B链接到人A.然后,单个列上的单个查询将检索所有朋友。

此设置也可用于“朋友”拥有不同特权或级别的友谊的地方。所以A人可以给予B更多的东西,而不是B给A的东西。