2009-12-23 76 views
0

我必须在我的数据库中的表。用户朋友在SQL查询

用户

- id 
- username 

朋友

- user_id (invitor) 
- friend_id (that get invitation) 
- accepted 

现在,如果用户#1邀请用户#2是朋友和#2接受,我想用户2用户1的显示网站和用户2的网站上的用户1。

我无法弄清楚这个查询应该如何。

我如何编写一个查询返回在同一个SQL查询的用户和他们的朋友?

回答

0

SELECT users.username FROM users, friends WHERE friends.accepted = 1 AND friends.user_id = ... AND friends.friend_id = users.id

+0

不应该'用户,friends'是'用户内部联接friends'还是我只是在想g的T-SQL?我认为“逗号加入”(或其他称为)会在T-SQL中折旧。 – 2010-01-30 02:11:45

0

假设你是显示在页面的用户的ID是5:

用户邀请朋友:

SELECT username 
FROM users, friends 
WHERE id = friend_id AND user_id = 5 AND accepted = 1 

为其发送邀请给用户的朋友

SELECT username 
FROM users, friends 
WHERE id = user_id AND friend_id = 5 AND accepted = 1 

在一个查询:

SELECT username 
FROM users, friends 
WHERE 
    (  
    (id = friend_id AND user_id = 5) 
    OR 
    (id = user_id AND friend_id = 5) 
) 
    AND accepted = 1 
0

如果我理解正确,我认为这会为你工作...

对于用户2显示用户1页...

SELECT U.ID, U.UserName 
FROM Friends F 
INNER JOIN Users U ON F.Friend_ID = U.ID 
WHERE 
    F.User_ID = [User 1 ID] 
    AND F.Accepted = [True|1] 

对于用户1到用户出现第2页。 ..

SELECT U.ID, U.UserName 
FROM Friends F 
INNER JOIN Users U ON F.User_ID = U.ID 
WHERE 
    F.Friend_ID = [User 2 ID] 
    AND F.Accepted = [True|1] 

你有什么在你的数据库应用,以取代括号内的值...