代码之家  ›  专栏  ›  技术社区  ›  animuson Hemanshu

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

  •  0
  • animuson Hemanshu  · 技术社区  · 14 年前

    对于这样的桌子:

    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`
    

    1 回复  |  直到 14 年前
        1
  •  0
  •   OMG Ponies    14 年前

    您所追求的是与表中数据相关的排名-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'