Mysql select查询直到达到条件

Mysql select query until reach the condition

假设我的用户 table 中有用户列表,如下所示。我需要从我的 table 中找到用户数,直到 userid 等于 100

所以这里的答案是 (3)。但是我怎样才能找到这个 MySQL 查询。有什么想法吗?

userid    name
---------------
10        aaa
30        bbb
100       ccc
60        ddd

这是实现您期望的解决方法之一。

SET @row_number:=0;

SELECT A.row_number FROM (
    SELECT Userid, name, @row_number:=@row_number+1 AS row_number  
    FROM UserDetail
) AS A
WHERE A.Userid = 100;

Working DEMO

如果 UserId 不是唯一 ID 并且它可以重复,您可以添加 ORDER BYLIMIT 1

SET @row_number:=0;

SELECT A.row_number FROM (
    SELECT Userid, name, @row_number:=@row_number+1 AS row_number  
    FROM UserDetail
) AS A
WHERE A.Userid = 100
ORDER BY A.row_number
LIMIT 1;

Working DEMO

给定数据的示例执行:

--DROP TABLE UserDetail;

CREATE TABLE UserDetail (Userid INT,  name VARCHAR (50));

INSERT INTO UserDetail (Userid, name) VALUES
(10 , 'Aaa'),
(30 , 'Bbb'),
(100, 'Ccc'),
(60 , 'ddd');

SET @row_number:=0;

SELECT A.row_number FROM (
    SELECT Userid, name, @row_number:=@row_number+1 AS row_number  
    FROM UserDetail
) AS A
WHERE Userid = 100;

这在 MySql 中很难做到,因为数字的 'first' 实例很难确定。

解决此问题的一种方法是创建行号,然后选择 Userid = 100 的最小行号

select min(row_number) from
(
SELECT @rownum:=@rownum + 1 as row_number, 
       p.*
FROM p,
(SELECT @rownum := 0) r
  ) g
where userid = 100

Here is a functional example