我有这两个表:
user{id,name,password....};
friends{id,user_id,user_id2,accept(bool)}
例如,说我想为user_id = 14获取朋友,行接受必须为1!我将如何做mysql查询,谢谢:)
PS。如果user1是user2的朋友,那么在查询时它必须是一个双向的东西 也意味着user2是user1的朋友,如果你理解我的意思! :))
答案 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