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

mac2025-04-21  1

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)