Mysql选择查询直到达到条件

Mysql选择查询直到达到条件,mysql,conditional-statements,limit,Mysql,Conditional Statements,Limit,假设我的用户表中有如下用户列表。我需要从表中查找用户数,直到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, nam

假设我的用户表中有如下用户列表。我需要从表中查找用户数,直到
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;

如果
用户id
不是唯一的id,并且可以重复,则可以使用
限制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;

使用给定数据执行示例:

--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中很难做到,因为数字的“第一个”实例可能很难确定

解决此问题的一种方法是创建行号,然后选择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

用户ID
字段是否被索引?或者您的查询是否按任何其他字段排序?如果您的表只有2列,为什么用户ID没有排序?实际上我的要求不同。我想从分数表中找到用户的排名。分数不是顺序,所以根据分数描述的顺序,我需要找到用户排名。这里我有用户ID。因此,通过传递userid,我需要这个条件。
userid
在整个表中不应该是唯一的吗?如果有多个userid=100的实例,这不起作用,您需要选择最小值。但伟大的解决方案!我们一定是在同一时间做这件事的@EoinS:认为
UserId
是唯一的,无论如何,通过
ORDER by
LIMIT 1处理重复的
UserId
。非常感谢:)。