对于这样的表:
username | time
---------------------------------------
animuson | 0.678
aP*animuson | 0.967
animuson | 0.567
qykumsoy | 0.876
我正试图在MySQL中找到一种方法来按顺序排序,然后找到用户名出现的位置,用户名只计算一次。因此,如果我正在搜索用户名'qykumsoy',它应该返回2,因为两个'animuson'时间都更快,但只有最快的一个计数,那么'qykumsoy'是之后的第二快。我可以将它们分组并订购,但我如何找到该用户名所在的位置?我认为在MySQL中执行此操作可能比循环遍历PHP中的所有结果更快,如果我错了,请纠正我。
到目前为止我的想法:
SELECT * FROM `times` ORDER BY MIN(`time`) GROUP BY `username`
我对MySQL不太熟悉,只有基本的东西。有什么想法吗?
答案 0 :(得分:0)
你所追求的是与表中数据相关的排名 - MySQL没有任何排名/分析/窗口功能,但你有两个选择 - 这个:
SELECT x.rank
FROM (SELECT t.username,
t.time,
(SELECT COUNT(*)
FROM TABLE y
WHERE y.time <= t.time) AS rank
FROM TABLE t) x
WHERE x.username = 'qykumsoy'
...或使用变量:
SELECT x.rank
FROM (SELECT t.username,
t.time,
@rownum := @rownum + 1 AS rank
FROM TABLE t
JOIN (SELECT @rownum := 0) r
ORDER BY t.time DESC) x
WHERE x.username = 'qykumsoy'