MySQL自定义变量自增——@rownum:= @rownum+1

Posted toyren

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL自定义变量自增——@rownum:= @rownum+1相关的知识,希望对你有一定的参考价值。

初识mysql自定义变量

有时候一张表虽然设置了ID自增,但是经过一系列业务增删骚操作后自增的ID也不是那么有序,MySQL中又没有获取行号的函数,因此我们需要通过一些自定义语句来进行获取。

通常的做法是:通过定义自定义变量@rownum来保存表中的数据。通过赋值语句
@rownum:=@rownum + 1 来累加达到递增行号的需求
注意:@rownum 是自定义变量而不是Mysql的函数,所以名字是可以随便取的比如@adc@行号@rowNo

例如:
	SELECT
	@rownum := @rownum + 1 AS '排名',
	b.type,
	b.NAME,
	b.description 
FROM
	tbl_book b,
	( SELECT @rownum := 0 ) r

SQL执行结果:

后半部分语句的 ( SELECT @rownum := 0 ) r 相当于创建了别名为:r 的新表,其表的列为@rownum,数值为0;
这里注意 ( SELECT @rownum := 0 ) r* 必须加括号且取表别名 否则会报错
通过利用变量将@rownum的行进行重新赋值,并显示。可以应用于获取行号或名次排列。

在原有的列上加前后缀 CONCAT()

通过Mysql CONCAT()函数连接字符串,也可以连接多个字段CONCAT(字段A,字段B,字段C) as ‘三个字段合为一个’

SELECT
	CONCAT( '你是第: ', @rownum := @rownum + 1, " 名" ) AS '排名',
	b.type,
	b.NAME,
	b.description 
FROM
	tbl_book b,
	( SELECT @rownum := 0 ) r

SQL执行结果:

mysql给查询结果额外添加自增列

1、模板如下:
SELECT (@rownum:=@rownum+1) 自增序号别名, 结果集字段
FROM 结果集, (SELECT @rownum:=0) AS 任意别名

示例如下:
SELECT @rownum:=@rownum+1 AS rownum, aliaA.*
FROM (
select username,age from test
) aliaA, (SELECT @rownum:=0) aliaB
#此处aliaA和aliaB两个别名必须有
不然就会报错
"Every derived table must have its own alias(每一个派生出来的表都必须有一个自己的别名)"

2、上述语句的效果等同于下述语句
set @rownum:=0;
Select (@rownum:=@rownum+1) as rownum, 结果集aliaA.* from 结果集

3、上述的方法同样适用于分页查询:
Select (@rownum:=@rownum+1) as rownum, aliaA.*
FROM 结果集 aliaA,(Select @rownum:=0) aliaB
order by aliaA.id desc
limit 0, 10;

Set @rownum:=0;
Select (@rownum:=@rownum+1) as rownum, aliaA.*
FROM 结果集 aliaA
order by aliaA.id desc
limit 0, 10;

4、示例
示例1直接输出
select @rownum:=@rownum+1 AS num1, username,age FROM (
select username,age from test
) A,(SELECT @rownum:=0) B;
示例2使用concat拼接
select concat(hello--,@rownum:=@rownum+1,|,username,|,age) FROM (
select username,age from test
) A,(SELECT @rownum:=0) B;
生成结果:
hello--1|zhangsan|23
hello--2|lisi|24

以上是关于MySQL自定义变量自增——@rownum:= @rownum+1的主要内容,如果未能解决你的问题,请参考以下文章

MySQL巧用自定义函数进行查询优化

mysql 中关于获取行号@rownum:=@rownum+1

mysql 给查询语句中增加一列自增id

mysql 给查询语句中增加一列自增id

利用 MySQL自定义变量高效查询

Mysql 增加rownum