我有一个查询,用于检索在线用户和用户朋友。现在我想知道将两者结合起来的最佳方法,以便我可以获得在线用户朋友的结果。
朋友查询:
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 :(得分: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语句中使用子查询应该合并它。不确定这是否会更快,取决于你是如何做事情所以对它进行分析。您可以加入您的用户表以获取朋友姓名信息以及您需要的其他信息。