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中的变量。为查询结果添加序号的原理,就是生成一个变量,每行的结果加一。
看了一些其他的博客, 。
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 :=和=的区别:
- 理解了变量, 和 “:=” , "= " 操作符,现在将两者联系起来。
这篇文章将两者之间的联系讲解的比较明白。
MYSQL的用户变量(@)和系统变量(@@):
- 理解了变量和操作符号了, 估计到现在,自然而然的就懂了实现mysql的排序了