【问题标题】:Determine position of first occurence of string in MySQL?确定MySQL中字符串第一次出现的位置?
【发布时间】:2010-07-27 02:12:54
【问题描述】:

对于这样的表:

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 的经验不是很好,只有基本的东西。有什么想法吗?

【问题讨论】:

    标签: sql mysql ranking rank


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2013-10-04
      • 1970-01-01
      • 1970-01-01
      • 2011-11-21
      • 1970-01-01
      • 2018-02-05
      • 2012-03-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多