我正在尝试为 mysql 查询生成 rownum。 这是我的代码。
select @rownum:=@rownum+1 rowno, (`plgap_nos`.`no_id` - 1) AS `no_id`
from `plgap_nos`,
(SELECT @rownum:=0) r
limit 0, 10
虽然一切正常,但第一排鞋的 rownum 是 1621 而不是 0。
它尝试使用不同的代码,如下所示。仍然存在同样的错误。
select COALESCE(@rownum:=@rownum+1,0) rank,
(`cnxnifty_plgap_nos`.`no_id` - 1) AS `no_id`
from `money_database`.`cnxnifty_plgap_nos`,
(SELECT @rownum:=0) r
limit 0, 10
看来我犯了一些我无法理解的愚蠢错误。
谁能帮忙。
其他信息 - 这就是数据的样子 -
排名 no_id
1621 0
1 7
2 18
3 21
4 33
5 37
6 45
最佳答案
我只是想澄清一下。下面的代码也有同样的问题吗?
select (@rn := @rn + 1) as rowno, (p.no_id - 1) AS no_id
from plgap_nos p cross join
(SELECT @rn := 0) params
order by p.no_id
limit 0, 10;
select
中的变量赋值应在 from
初始化之后执行。我还没有看到 MySQL 以错误的顺序进行初始化(这将是您所看到的行为的原因之一)。
我对查询所做的更改(用交叉联接
代替逗号、order by
和表别名)不应影响结果集。但是,cross join
的作用域语义与 ,
不同,因此 cross join
最终出现的可能性很小。解决问题。
关于mysql - @rownum mysql 的第一行错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30817802/