2011-04-13 48 views
0

可能重複:
Self referencing relation with followers|friends usersPHP SQL連接關係

您好。

我有兩個表,分別叫做usersusers_friends

用戶:

id INT 
username VARCHAR 
..... 

users_friends:

user_id INT 
friend_id INT 
PRIMARY KEY (`user_id`,`friend_id`) 

我如何獲得有關特定用戶的朋友的信息?假設我想用5id列出與用戶關聯的朋友。

無法讓我的連接正常工作,我嘗試的所有事情都沒有結果。有任何想法嗎?這應該是我簡單的查詢與兩個INNER JOIN我認爲,但無法管理。

然後第二個問題是我如何使用Kohana 3.1 ORM來構造它?也許我不應該?

編輯:任何人都有這樣做與Kohana 3 ORM的想法?

+0

friend_id指的是什麼?用戶表? – JohnP 2011-04-13 12:00:02

+0

是的,'friend_id'是另一個用戶ID – sandelius 2011-04-13 12:01:47

回答

0

是不是很簡單:

Select friend_id from users_friends where user_id = 5 

5是用戶ID。

+0

不,我想獲取有關當前用戶朋友的信息 – sandelius 2011-04-13 12:02:33

2

什麼是這樣的:

select users.* 
from users 
    inner join users_friends on users_friends.friend_id = users.user_id 
where users_friends.user_id = 5 
1
SELECT * 
FROM `users` AS u 
INNER JOIN `users_friends` AS uf ON u.id = uf.user_id 
WHERE u.id = '5' 

這是INNER JOIN

的查詢,如果所有的信息都存儲在用戶,您將需要加入users一次

SELECT ufu.* 
FROM `users` AS u 
INNER JOIN `users_friends` AS uf ON u.id = uf.user_id 
INNER JOIN `users` AS ufu ON uf.friend_id = ufu.user_ud 
WHERE u.id = '5' 
+0

我想獲取所有用戶(ID爲5)的朋友infromation。這返回信息關於用戶(ID爲5) – sandelius 2011-04-13 12:07:38

+0

@sandelius第二個查詢將返回它:) – Teneff 2011-04-13 12:08:41

+0

這幫助我與我的第一個問:) thx – sandelius 2011-04-14 05:20:45

0

關閉我的頭頂上:

SELECT friend_id, username 
FROM users_friends JOIN users 
    ON users_friends.friend_id = users.id 
WHERE user_id = 5; 
1

Ofcourse一個JOIN是可能的,但不會是更快然後像一個簡單的查詢:

SELECT * 
FROM users 
WHERE id IN (
    SELECT friendID FROM user_friends WHERE userID=5 
) 

但是,如果你想反過來此只列出朋友用戶5,所以列出說用戶5是朋友的人,這個查詢也更容易改變。

SELECT * 
FROM users 
WHERE id IN (
    SELECT userID FROM user_friends WHERE friendID=5 
)