Mysql查询结果显示行号

如何获取行号?关键:自定义变量@rowNum:=0;

假设有这样的数据

mysql> select id,name from students;
+----+----------+
| id | name     |
+----+----------+
|  1 | zhangsan |
|  2 | lisi     |
|  3 | wangwu   |
|  4 | trx      |
|  5 | pjf      |
|  6 | wzm      |
+----+----------+

再看

mysql> SELECT @rowNum:=0;
+------------+
| @rowNum:=0 |
+------------+
|          0 |
+------------+

mysql> SELECT @rowNum:=1;
+------------+
| @rowNum:=1 |
+------------+
|          1 |
+------------+

SELECT @rowNum:=0; 表示声明了一个叫rowNum的变量并赋值为0,这个变量名是自定义的,在sql中我们可以对这个变量进行计算,如:

mysql> select (@rowNum:=@rowNum+1) as num from (SELECT @rowNum:=0) a;
+------+
| num  |
+------+
|    1 |
+------+

mysql> select (@rowNum:=@rowNum+5) as num from (SELECT @rowNum:=0) a;
+------+
| num  |
+------+
|    5 |
+------+

此时 (SELECT @rowNum:=0) a 相当于一个临时表,如果将它与students表进行连接将会得到:

mysql> select b.*,id,name from students a,(SELECT @rowNum:=0) b;
+------------+----+----------+
| @rowNum:=0 | id | name     |
+------------+----+----------+
|          0 |  1 | zhangsan |
|          0 |  2 | lisi     |
|          0 |  3 | wangwu   |
|          0 |  4 | trx      |
|          0 |  5 | pjf      |
|          0 |  6 | wzm      |
+------------+----+----------+

可以看到,b表只有一条数据,与a表连接后就有了a表的6条数据,如果我们对自定义变量@rowNum:进行+1操作,会有什么效果呢?

mysql> select (@rowNum:=@rowNum+1) as num,id,name from students a,(SELECT @rowNum:=0) b;
+------+----+----------+
| num  | id | name     |
+------+----+----------+
|    1 |  1 | zhangsan |
|    2 |  2 | lisi     |
|    3 |  3 | wangwu   |
|    4 |  4 | trx      |
|    5 |  5 | pjf      |
|    6 |  6 | wzm      |
+------+----+----------+
6 rows in set (0.00 sec)

这就达到了查询结果带行号的目的,我们推演一下两个表连接的过程:

  1. 一开始自定义变量@rowNum:=0,a表第一条数据(1,'zhangsan')与自定义变量join,不过我们取的是@rowNum:=@rowNum+1,即0+1,那么最终就会得到(1,1,'zhangsan')
  2. 此时自定义变量@rowNum:=1,a表第一条数据(2,'lisi')与自定义变量join,即1+1,那么最终得到(2,2,'lisi')
  3. ....(以此类推)

由此,我们就能得到sql查询带行号的结果。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值