MySQL - 获取行在结果集中的位置
MySQL - Getting the position of a row in a result set
我有以下 MySQL 查询:
SELECT serverusers.serverID, serverusers.userID, serverusers.xpTotal, users.bot
FROM users INNER JOIN serverusers ON users.userID = serverusers.userID
WHERE users.bot = 'false' && serverID = 318467989655781389
ORDER BY xpTotal DESC
我需要使用它来查找特定 userID
在其 "rank" 中的位置。例如:
+---------+-----------+------------+----------+
serverID | userID | xpTotal | bot |
----------------------------------------------+
50 | 23892 | 200 | false |
----------------------------------------------+
50 | 27173 | 180 | false |
----------------------------------------------+
50 | 17294 | 150 | false |
----------------------------------------------+
50 | 72973 | 110 | false |
如果我要提供 17294
的 userID
,它应该 return 3
因为 17294
是第 3 行。
也许使用变量的简单方法:
SELECT suu.*
FROM (SELECT su.serverID, su.userID, su.xpTotal, u.bot,
(@rn := @rn + 1) as rn
FROM users u INNER JOIN
serverusers su
ON u.userID = su.userID CROSS JOIN
(SELECT @rn := 0) params
WHERE u.bot = 'false' AND su.serverID = 318467989655781389
ORDER BY xpTotal DESC
) suu
WHERE userID = ?;
MySQL 的最新版本在 ORDER BY
之前处理 SELECT
中的变量。所以,你可能需要一个额外的子查询层:
SELECT suu.*
FROM (SELECT su.serverID, su.userID, su.xpTotal, u.bot,
(@rn := @rn + 1) as rn
FROM (SELECT su.serverID, su.userID, su.xpTotal, u.bot
FROM users u INNER JOIN
serverusers su
ON u.userID = su.userID
WHERE u.bot = 'false' AND su.serverID = 318467989655781389
ORDER BY xpTotal DESC
) suu CROSS JOIN
(SELECT @rn := 0) params
) suu
WHERE userID = ?;
我有以下 MySQL 查询:
SELECT serverusers.serverID, serverusers.userID, serverusers.xpTotal, users.bot
FROM users INNER JOIN serverusers ON users.userID = serverusers.userID
WHERE users.bot = 'false' && serverID = 318467989655781389
ORDER BY xpTotal DESC
我需要使用它来查找特定 userID
在其 "rank" 中的位置。例如:
+---------+-----------+------------+----------+
serverID | userID | xpTotal | bot |
----------------------------------------------+
50 | 23892 | 200 | false |
----------------------------------------------+
50 | 27173 | 180 | false |
----------------------------------------------+
50 | 17294 | 150 | false |
----------------------------------------------+
50 | 72973 | 110 | false |
如果我要提供 17294
的 userID
,它应该 return 3
因为 17294
是第 3 行。
也许使用变量的简单方法:
SELECT suu.*
FROM (SELECT su.serverID, su.userID, su.xpTotal, u.bot,
(@rn := @rn + 1) as rn
FROM users u INNER JOIN
serverusers su
ON u.userID = su.userID CROSS JOIN
(SELECT @rn := 0) params
WHERE u.bot = 'false' AND su.serverID = 318467989655781389
ORDER BY xpTotal DESC
) suu
WHERE userID = ?;
MySQL 的最新版本在 ORDER BY
之前处理 SELECT
中的变量。所以,你可能需要一个额外的子查询层:
SELECT suu.*
FROM (SELECT su.serverID, su.userID, su.xpTotal, u.bot,
(@rn := @rn + 1) as rn
FROM (SELECT su.serverID, su.userID, su.xpTotal, u.bot
FROM users u INNER JOIN
serverusers su
ON u.userID = su.userID
WHERE u.bot = 'false' AND su.serverID = 318467989655781389
ORDER BY xpTotal DESC
) suu CROSS JOIN
(SELECT @rn := 0) params
) suu
WHERE userID = ?;