mysql 如何使用 where 子句获取行位置

mysql how to get row position with where clause

我有这样的数据

id  userid        phone
1   1000          11111
2   1001          22222
3   1000          33333
4   1000          44444
5   1001          55555
6   1000          66666

第 phone 列是唯一的

我期待以下结果

position phone
3        44444

我尝试了 row_number 但它不起作用。

select *,row_number() over 
    (partition by userid order by id asc) as position 
from table 
where phone=44444

这样位置总是1

row_number() 根据 WHERE 子句应用于结果集。由于您在该结果中只有一条记录,因此 row_number()1.

首先需要select全集,对其应用row_number(),然后得到搜索到的编号

的记录
SELECT position,
       phone
       FROM (SELECT row_number() OVER (PARTITION BY userid
                                       ORDER BY id ASC) AS position,
                    phone
                    FROM elbat) AS x
       WHERE phone = 44444;

如果 table 很大,将派生 table 的结果限制为具有搜索号码的用户的记录可能会有所帮助。 (phone, userid) 上的索引和 (userid, id, phone) 上的另一个索引可能支持这一点。

SELECT position,
       phone
       FROM (SELECT row_number() OVER (ORDER BY id ASC) AS position,
                    phone
                    FROM elbat
                    WHERE userid = (SELECT userid
                                           FROM elbat
                                           WHERE phone = 44444)) AS x
       WHERE phone = 44444;