我正在尝试从表格中选择朋友列表,这很好。但是现在我试图通过另一个表来排序结果,这是用户在线状态/最近的在线活动。
我尝试使用的查询是(错误是:'where 子句'中的未知列'friendID'):
SELECT
CASE WHEN f.userID=$session
THEN f.userID2 ELSE f.userID
END AS friendID
FROM friends f, usersStatus u
WHERE
(
f.userID=$session OR f.userID2=$session
)
AND friendID=u.userID
AND f.state='1'
ORDER BY u.periodicDate DESC, u.setStatus ASC
LIMIT 5
现在只返回用户朋友的查询是这样的:
SELECT
CASE WHEN f.userID=$session
THEN f.userID2 ELSE f.userID
END AS friendID
FROM friends f
WHERE
(
f.userID=$session OR f.userID2=$session
)
AND f.state='1'
LIMIT 5
应该匹配 usersStatus.userID,然后friendID
我想以上面示例中的方式对它们进行排序。我还想补充一点,如果friendID
不是 IN usersStatus 表,它应该在最后自动对这些行进行排序。
u.periodicDate
只是用户设置的最近日期,所以这将指示用户上次活动的时间,所以我希望最近活动的用户排在第一位。
u.setStatus
设置取决于我的脚本确定他是什么,所以它可以是1
, 2
, 或3
. 1
存在Online
、2
存在Away
和3
存在Offline
。
所以就像我上面说的,应该自动给这个表中还没有一行的用户一个offline
状态。
编辑
我有一个查询可以按我的意愿工作,但是它非常混乱,必须极大地浪费它的资源,因为我必须按朋友 ID 分组才能让它只返回一次用户。(因为我的朋友数据库保留每一行,所以如果一个人取消了某人的朋友,如果他们返回朋友等,它只会创建一个新行。)
SELECT * FROM usersStatus,
(SELECT
CASE WHEN friends.userID=$session
THEN friends.userID2 ELSE friends.userID
END AS friendID
FROM friends, usersStatus
WHERE
(
friends.userID=$session OR friends.userID2=$session
)
AND friends.state='1'
) t
WHERE t.friendID=usersStatus.userID
GROUP BY t.friendID
ORDER BY usersStatus.periodicDate ASC, usersStatus.setStatus ASC
LIMIT 5