mysql-@i-查询结果添加序号

mysql-@i-查询结果添加序号

SELECT
	( @i := @i + 1 ) AS i,
	t1.username,
	t1.avatar,
	t2.extcredits2 
FROM
	pico_common_member t1,
	pico_common_member_count t2,
	( SELECT @i := 0 ) AS k 
WHERE
	t1.uid = t2.uid 
ORDER BY
	t2.extcredits2 DESC,
	t2.extcredits1 DESC

在一个排行榜的sql中,看到了一个@i的东西。感觉看不懂的东西都是牛逼的东西。所以心里就想着自己要学会它。今天随便百度了一下,发现是个很简单的东西。其实它就是mysql中的变量。为查询结果添加序号的原理,就是生成一个变量,每行的结果加一。
看了一些其他的博客, 。
感觉这个哥们儿转的一篇文章写的还不错https://blog.csdn.net/qq_34531925/article/details/79483312
mysql文档 https://www.mysqlzh.com/doc/225/507.html
下面是自己的理解。如果不对望指正。谢谢。


要明白mysql序号,就要先知道mysql变量。变量分两种: 1系统变量;2用户变量;

  • 局部变量

mysql 文档给出的定义是:
DECLARE var_name[,…] type [DEFAULT value]
这个语句被用来声明局部变量。要给变量提供一个默认值,请包含一个DEFAULT子句。值可以被指定为一个表达式,不需要为一个常数。如果没有DEFAULT子句,初始值为NULL。
局部变量的作用范围在它被声明的BEGIN … END块内。它可以被用在嵌套的块中,除了那些用相同名字 声明变量的块。
1:被声明的BEGIN … END块; 2:DECLARE定义局部变量

  • 变量SET语句

SET var_name = expr [, var_name = expr] …
在存储程序中的SET语句是一般SET语句的扩展版本。被参考变量可能是子程序内声明的变量,或者是全局服务器变量。
在存储程序中的SET语句作为预先存在的SET语法的一部分来实现。这允许SET a=x, b=y, …这样的扩展语法。其中不同的变量类型(局域 声明变量及全局和集体变量)可以被混合起来。这也允许把局部变量和一些只对系统变量有意义的选项合并起来。在那种情况下,此选项被识别,但是被忽略了。
mysql 文档中给出的解释的自己读的也不太明白。

  • 另外还需要一个基础知识。mysql中的 := 和 = 符号的区别。

推荐一篇文章
mysql :=和=的区别:
https://blog.csdn.net/qq_37155959/article/details/81005287

  • 理解了变量, 和 “:=” , "= " 操作符,现在将两者联系起来。

这篇文章将两者之间的联系讲解的比较明白。
MYSQL的用户变量(@)和系统变量(@@):
https://blog.csdn.net/welkin8888/article/details/3505533

  • 理解了变量和操作符号了, 估计到现在,自然而然的就懂了实现mysql的排序了

再推荐一篇文章,这篇文章,很简单。但是一看,就基本上看完了,mysql的排序。
MySQL的(@i:=@i+1)用处及用法:
https://www.wandouip.com/t5i407285/

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值