2009-12-23 77 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] 

你有什麼在你的數據庫應用,以取代括號內的值...