MySQL中实现rank排名查询以及在Mybatis中使用 mysql 的自定义变量 @的问题解决

您所在的位置:网站首页 平均分排名怎么排序 MySQL中实现rank排名查询以及在Mybatis中使用 mysql 的自定义变量 @的问题解决

MySQL中实现rank排名查询以及在Mybatis中使用 mysql 的自定义变量 @的问题解决

2024-07-12 12:05| 来源: 网络整理| 查看: 265

首先是想要对mysql数据库中查询到的列表数据进行一个排名,因为有分页排序等一堆条件就想着直接在sql上实现,但MySQL不存在类似于SQL Server或Orcal中的rank()函数,最终决定使用手动定义变量的方式来做

sql语句中,使用@来定义一个变量。如:@abcsql语句中,使用:=来给变量赋值,:@abc:=123,则变量abc的值为123sql语句中,if(A,B,C)表示,如果A条件成立,那么执行B,否则执行C,如:@abc := if(2>1,100,200)的结果是,abc的值为100。

先在Navicat上编写sql,,定义curRank 变量初始值为0,每次查询加1

set @curRank := 0; SELECT @curRank := @curRank + 1 as rank, a.uid uid FROM user a ORDER BY a.totalenergy desc

执行成功

 

然后复制到项目里跑

 果然,担心的一幕出现了,mybatis 不支持这种写法!!!

后来经过一系列挣扎(省略号...)

其实mybatis 是支持 自定义变量的

网上这样说:

但是我试了还是不行(后来发现可能是我写错了符号)最终改写:

where a.uid in (${ids}) ORDER BY a.totalenergy desc

定义变量SELECT @curRank:=0放到了子查询里,两条sql语句合二为一,最终成功执行

ps:在实验的时候yml文件里的数据库url连接上加了一行&allowMultiQueries=true,如果还是有问题就加上(偷个懒我就不研究了,有明白的小伙伴可留意告知)

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3