2012-04-28 19 views
0

更新:我想通了。請參閱下面的答案。php邏輯for follower/followee

我試圖在應用程序級別編寫一些邏輯來識別下表中的朋友(共同追隨者)。我的查詢返回的數據類似下表的格式(從this問題借來的,但我並不需要一個查詢,該部分的完成):

A B 
1 2 // mutual followers, so "friends" 
2 1 // mutual followers, so "friends" 
1 3 // user 1 is following 3 
1 4 // user 1 is following 4 

所以,我怎麼能寫一些邏輯,這說明A = B和B = A的用戶,但在不同的行中?使用PHP/codeigniter。

在響應請求,這裏的SQL表和查詢:

Users table - uid, fname, lname 
Followers table - user_id, follow_id 

Select users.uid, users.fname, users.lname, u.uid, u.fname, u.lname 
FROM users 
INNER JOIN follows f on (f.user_id=users.uid) 
INNER JOIN users u on (u.uid=f.follow_id) 
+0

您是否問如何運行鏈接到的示例中提供的SQL查詢? – Claudiu 2012-04-28 00:27:05

+0

不,我有查詢工作,它會產生下面的結果。 (這是一個不同的查詢)。只是試圖創建邏輯。 – chowwy 2012-04-28 00:28:32

+0

你在不同的行中意味着什麼?預期產出是多少? – Claudiu 2012-04-28 00:34:41

回答

1

好吧,我想通了。我需要第二個INNER JOIN用於追隨者表。我將下面的代碼添加到我的SQL查詢中,並且工作。

INNER JOIN followers f2 ON u.id = f2.user_id AND users.id = f2.follow_id 
+0

很高興看到這在行動。乾杯。 – philwinkle 2012-04-28 02:29:00

+0

感謝您提前幫助 - 否則無法啓動。在我使用您的修復程序後,我嘗試了應用程序邏輯,但無法啓動它。有人建議在mySQL中做這件事(我不想這麼做),但是我對它進行了幾個小時的修補,最後終於實現了。 – chowwy 2012-04-28 04:22:16

1

我想你想是這樣的:

$results = array(array(1,2),array(2,1),array(1,3),array(1,4)); 
$mutual_users = array_filter($results,function($elem)use($results){ 
    if(in_array(array_reverse($elem),$results)){ 
     return true; 
    } 
}); 
print_r($mutual_users);