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
。非常感谢:)。