确定MySQL中第一次出现字符串的位置?

时间:2010-07-27 02:12:55

标签: sql mysql ranking rank

对于这样的表:

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不太熟悉,只有基本的东西。有什么想法吗?

1 个答案:

答案 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'