2012-02-05 56 views
0

我有一個查詢,檢索在線用戶和用戶的朋友。現在我想知道結合這兩者的最佳方式,以便我可以獲得在線用戶朋友的結果。MYSQL結合兩個查詢來獲得功能

朋友查詢:

SELECT 
     CASE WHEN userID=$session 
     THEN userID2 
     ELSE userID 
     END AS friendID 
FROM friends 
WHERE userID=$id OR userID2=$session 
LIMIT 18 

用戶在線:

SELECT * 
FROM usersActivity 
WHERE setActivity!=3 
AND userID!=$session 

usersActivity.userID需要匹配friendID

+0

直到您指出「朋友」和「使用行爲」表格如何鏈接,才能做到。 – 2012-02-05 17:51:29

+0

usersActivity.userID需要匹配friendID – 2012-02-05 17:52:45

+0

作爲列表還是計數?給我你的用例。 – iLLin 2012-02-05 18:02:16

回答

1

查詢應該是:

SELECT users.name 
FROM usersActivity 
INNER JOIN friends ON 
    (usersActivity.userID = usersActivity.userID AND usersActivity.userID2 = $session) OR 
    (usersActivity.userID2 = usersActivity.userID AND usersActivity.userID = $session) 
INNER JOIN users ON 
    (usersActivity.userID = users.userID) OR 
    (usersActivity.userID2 = users.userID) 
WHERE usersActivity.setActivity!=3 
    AND usersActivity.userID!=$session 
    AND users.userID != $session 
GROUP BY users.id 

您可以使用COUNT(user.id),如果你希望只算用戶。或者選擇所有的名字(將它們存儲起來供以後在列表中使用),並且僅使用mysql_num_rows()來獲得實際的在線朋友數量

0

我想我明白你的後:

SELECT userID FROM usersActivity 
    WHERE setActivity !=3 
    AND userID IN(
    (SELECT userID FROM friends WHERE userID2=$id) 
); 

這假設你有兩行你的朋友鏈接表和$id是當前登錄的用戶。

userID userID2 
1  2 
2  1 

在你的where語句中使用子查詢應該合併這個。不知道這是否會更快,取決於你如何做事情,如此描述它。您可以加入您的用戶表,獲取朋友姓名信息以及您需要的其他信息。

+0

我的設置只有一行友誼,而不是兩個。哪一個是我的case子句在獲取friendID – 2012-02-05 18:20:38

+0

中起作用的地方你可以修改子查詢,這只是一個例子,可以幫助你找到你需要的地方。將您的CASE添加到子查詢中的哪個位置。 – iLLin 2012-02-05 18:22:11

+0

另外,出於性能原因,您可能需要考慮將行數加倍。 – iLLin 2012-02-05 18:22:54