使用mysql的朋友关系?

时间:2011-02-17 21:05:31

标签: php mysql

我有这两个表:

user{id,name,password....};
friends{id,user_id,user_id2,accept(bool)}
例如,说我想为user_id = 14获取朋友,行接受必须为1!我将如何做mysql查询,谢谢:)

PS。如果user1是user2的朋友,那么在查询时它必须是一个双向的东西 也意味着user2是user1的朋友,如果你理解我的意思! :))

4 个答案:

答案 0 :(得分:2)

请尝试以下操作。

select 
 f1.user_id2 
from 
 user u,friends f1 , friends f2
where
f1.user_id1 = 14,
f1.accept = 1,
f1.user_id2 = f2.user_id1,
f2.user_id2 = f1.user_id1,
f2.accept = 1

谢谢, 罗汉

编辑:如果你需要朋友的详细信息,那么只有加入用户u表才有意义。否则你可以把用户带出来。

答案 1 :(得分:1)

我可能不会在两个表格中这样做。让我在用户之间建立多对多关系对我来说更有意义。你遇到的问题是你在朋友表中限制了“朋友”的数量。这是除非你有朋友表作为用户的孩子。我假设friends表中有一个指向用户的外键。我认为你是那里的一部分,但不确定为什么你有user_id2因为它没有意义关系。在这种情况下,查询将是:

select *
from user
   inner join friends on friends.user_id = user.id
where friends.id = true

答案 2 :(得分:1)

我不是故意弃用,但这是非常非常基本的sql,你可以通过谷歌或书籍轻松找到答案。话虽如此,这就是答案。

SELECT * FROM friends WHERE (user_id=14 OR user_id2=14) AND accept=true;

让我为你分解,因为你正在使用SQL,如果你不学习它,你将浪费大量时间寻找答案。

SELECT * FROM friends

表示从朋友那里获取所有行。 “*”是列名的替代,表示“所有列”。例如,如果你有

SELECT (id,user_id) FROM friends

返回的行只包含那些列。

然后是WHERE子句。

WHERE (user_id=14 OR user_id2=14) AND accept=true

表示它的外观:您选择的行应该至少有一个user_id等于14,accept应该为true。 MySQL对布尔值使用true,false和null(如果允许)。其他一些数据库,如MSSQL,使用“BIT”类型而不是布尔值,分别对true,false和null使用1,0或null。

OR条款是因为,正如您在编辑中所述,这种友谊可以是“双向”。

所以,如果你把它放在一起,

SELECT * FROM friends WHERE (user_id=14 OR user_id2=14) AND accept=true;

答案 3 :(得分:0)

这将为您提供接受朋友的user_id = 14的每一行

SELECT
  *
FROM
  friends
WHERE
  user_id = 14
  AND
  accept = TRUE