sql实现select取数行号

本节演示数据库为mysql5.7
接下来首先看下表结构


image.png

下面说下这节的需求


image.png

products商品表及数据存在本地yii数据库下面的products表中
image.png

首先了解下会话变量

一个navicat里面的查询编辑器就是一个会话


image.png

只要不关闭这个会话(设置的变量就一直存在)
image.png

但是在别的会话里引用这个变量为空
image.png

下面看下变量赋值
image.png

image.png

image.png

两种方式都可以赋值 但是在select语句里面赋值必须有:= set里面的:冒号可以省略

其中as 是 给列名起别名 而且select里面是会把变量打印出来


image.png

下面把会话变量和sql语句排序结合在一起
首先查看下表里面数据 按照p_view 倒排序
image.png

image.png

加行号
image.png

可以看见我们用了两条sql语句实现的行号加一的功能
最开始给@rownum初始值为1
如果不给@rownum初始值结果如下
image.png

结果都为null 因为没初始值
如果不想使用两条sql语句 那应该怎么做呢
image.png

可以使用ifnull函数 mysql自带的函数 有两个参数 为表达式 如果表达式一不为空返回表达式一 否则返回表达式二
image.png

但是这样做有个问题 就是会话里面的变量不结束 每次运行sql行号都会增加
下面看下如何解决这个问题
最终解决方案 就是采用另外一张不存在的表 对@rownum进行赋值
image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容