gpt4 book ai didi

mysql - SQL查询,从表1中按表2行排序

转载 作者:行者123 更新时间:2023-11-30 23:24:41 24 4
gpt4 key购买 nike

我正在尝试从表格中选择 friend 列表,效果很好。但是现在我试图通过另一个表对结果进行排序,该表是用户在线状态/最近的在线事件。

我尝试使用的查询是(错误是:“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 不在 usersStatus 表中,它应该自动在末尾对这些行进行排序。

u.periodicDate 只是用户设置的最近日期,所以这表示用户上次活跃的时间,所以我希望最近活跃的用户排在第一位。u.setStatus 的设置取决于我的脚本确定他是什么,所以它可以是1231 表示在线2 表示离开3 表示离线

所以就像我上面说的,在这个表中还没有一行的用户应该自动被赋予 offline 状态。

编辑

我有一个查询可以按我想要的方式工作,但是它非常困惑并且一定会极大地浪费它的资源,因为我必须按 friendID 进行 GROUP BY 以便它只返回一次用户。 (因为我的好友数据库保留每一行,所以如果一个人与某人解除好友关系,如果他们返回好友等,它只会创建一个新行)

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

最佳答案

而不是写

AND friendID=u.userID

使用别名的实际值:

AND CASE WHEN f.userID=$session 
THEN f.userID2 ELSE f.userID
END = u.userID

关于mysql - SQL查询,从表1中按表2行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13924775/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com