目录
一、效果展示
1、普通查询加序号
SELECT t1.NAME,( @i := @i + 1 ) AS '序号' FROM t1,( SELECT @i := 0 ) AS itable;
这种情况遇上分页时会出现每次翻页都从1开始重新计算,这种情况可以使用分页偏移量作为开始计算数,解决方案如下:
2、分页查询加序号
SELECT ( @i := @i + 1 ) AS '序号' ,t1.NAME FROM t1,( SELECT @i := 2 ) AS itable limit 2,5
SELECT ( @i := @i + 1 ) AS '序号' ,t1.NAME FROM t1,( SELECT @i := #{startSize} ) AS itable limit #{startSize},#{pageSize};
二、表结构以及数据
CREATE TABLE `t1` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `jgid` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8; INSERT INTO `avlicy`.`t1`(`id`, `name`, `jgid`) VALUES (1, '二二', 2); INSERT INTO `avlicy`.`t1`(`id`, `name`, `jgid`) VALUES (2, '李四', 2); INSERT INTO `avlicy`.`t1`(`id`, `name`, `jgid`) VALUES (4, '七七', 3); INSERT INTO `avlicy`.`t1`(`id`, `name`, `jgid`) VALUES (5, '小猕猴', 1); INSERT INTO `avlicy`.`t1`(`id`, `name`, `jgid`) VALUES (6, '小米粥', 1); INSERT INTO `avlicy`.`t1`(`id`, `name`, `jgid`) VALUES (7, '小哈吧', 1);
三、解释说明
1、解释
- (@i:=@i+1) 也可以写成 @i:=@i+1 ,加括号是为了视觉上更清晰。它代表的意思是:变量i 加1 赋值给变量i,在定义好一个变量后每次查询都会给这个变量自增,每次执行查询语句获取结果后就不需要这个变量自增了
- (SELECT @i:=0) AS itable,定义用户变量i,设置初始值为0,然后将它作为派生表使用,AS定义了表的别名。
- SET @i=0 。定义用户变量i,赋初值为0,
2、相关知识点
- MySQL定义用户变量的方式:select @变量名 ,上面的SQL语句中,变量的名字是 i
- 用户变量赋值:一种是直接用"=“号,另一种是用”:="号。
3、= 和 := 的区别:
使用set命令对用户变量进行赋值时,两种方式都可以使用
即:SET @变量名=xxx 或 SET @变量名:=xxx
使用select语句对用户变量进行赋值时,只能使用":=“方式,因为在select语句中,”="号被看作是比较操作符。即:SELECT @变量名:=xxx
- ①:用户变量
- ②:派生表
- ③:AS设置别名