首页 » LANMP » mysql » 正文

sql思路:巧取数据并显示行号 (假设按p_view倒排序)

设计需求

取出products表中p_name,p_type,p_view字段,并加入行号,行号字段为rownum;

 

表结构及数据

 
 

首先我们写出排序的sql


因为MySQL并没有 oracle、sqlserver那样直接的方法。因此我们只能自己实现

我们引入会话变量
基本设置方法:

set @xxx=xxxx;
select @xxxx;

如何对变量进行赋值?

:= 这才是mysql对变量真正赋值的方式

只不过使用 set 语句时 可以写成=

 
 

如果分两步写其实可以这样

如果想只用一条sql语句实现呢?
测试代码如下:

这时会发生一个问题 ,如果这个变量 一上来没定义,则就一直是null

 
 

介绍mysql的ifnull函数

IFNULL(expr1,expr2) :

expr1 不为 NULL,则 IFNULL() 的返回值为 expr1; 否则其返回值为 expr2
其中expr1,expr2皆为表达式

借助ifnull函数,sql演变如下

问题又来了,第二次运行 @rownum不是从1开始的

 
 

所以最终解决方案是

发表评论

正在加载验证码......

请先完成验证