我正在尝试从表格中选择朋友列表,这样可以正常工作。但是现在我试图通过另一个表来订购结果,这是用户在线状态/最近的在线活动。
我尝试使用的查询是(错误是:'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
friendID
应匹配usersStatus.userID,然后我想按照上面的示例中的方式对它们进行排序。我还想补充一点,如果friendID
不是IN usersStatus表,它应该在结尾处自动排序这些行。
u.periodicDate
只是用户设置的最新日期,因此这表示用户最后一次处于活动状态,因此我希望最近活跃的用户成为第一个。
u.setStatus
的设置取决于我的脚本确定的内容,因此可以是1
,2
或3
。 1
为Online
,2
为Away
,3
为Offline
。
就像我上面所说的那样,在这个表中还没有一行的用户应该自动获得offline
状态。
修改
我有一个查询可以按照我想要的方式工作,但是它非常混乱并且必须非常浪费它的资源,因为我必须使用GROUP BY friendID才能返回用户一次。 (因为我的朋友数据库保留了每一行,所以如果一个人不和别人交朋友,只要他们回交朋友等就会创建一个新行。)
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
答案 0 :(得分:0)
而不是写
AND friendID=u.userID
使用别名的实际值:
AND CASE WHEN f.userID=$session
THEN f.userID2 ELSE f.userID
END = u.userID