MYSQL结合两个查询来获得功能

时间:2012-02-05 17:49:15

标签: php mysql sql

我有一个查询,用于检索在线用户和用户朋友。现在我想知道将两者结合起来的最佳方法,以便我可以获得在线用户朋友的结果。

朋友查询:

 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

2 个答案:

答案 0 :(得分: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()获取在线朋友的实际数量

答案 1 :(得分: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语句中使用子查询应该合并它。不确定这是否会更快,取决于你是如何做事情所以对它进行分析。您可以加入您的用户表以获取朋友姓名信息以及您需要的其他信息。