您现在的位置是:网站首页 > 代码编程 > 数据库数据库
【原】MySQL按照传入参数的顺序返回结果
不忘初心 2019-03-10 围观() 评论() 点赞() 【数据库】
简介:在做一个自动推荐系统的时候,碰到了一个问题,我传入我想做比对的tag,但是实际返回结果却不大对,一番追查下来,发现竟然是mysql返回结果集的时候,没有按照我传
在做一个自动推荐系统的时候,碰到了一个问题,我传入想做关联的tag,但是实际返回结果却不大对,一番追查下来,发现竟然是mysql返回结果集的时候,没有按照我传入参数的顺序,而是按照了ID从小到大的排列顺序,导致查询数据的时候,关联度最高的标签没有放在最前面。
查阅资料发现,mysql是允许指定这个返回参数顺序的,只不过要多加一个order by field (id, ....),现在用我的代码给大家演示一下这个问题。
mapper.xml映射文件:
<select id="gets" resultMap="resultMap">
select
<include refid="columns"/>
from tag
where deleted = 0
and id in
<foreach collection="ids" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</select>
mapper.java映射方法:
public Map<Integer, T> gets(Collection<Integer> ids) {
if (CollectionUtils.isEmpty(ids)) {
return null;
}
List<T> entitys = baseDao.gets(new LinkedHashSet<>(ids));
if (CollectionUtils.isEmpty(entitys)) {
return null;
}
Map<Integer, T> map = new LinkedHashMap<>();
for (T entity : entitys) {
map.put(entity.getId(), entity);
}
return map;
}
开始就是为了防止这个问题,我还特意写了一个LinkedHashSet来处理顺序,但是没想到问题出在了mysql身上。
查询结果:
大家看到,我传入的顺序是倒序(我这里是碰巧,顺序可以随意打乱),但是返回的时候却变成了正序,导致我关联度最高的标签反而跑到后面去了,这影响可就大了,相当于自动推荐失败了。。。
加上order by field再来测试一下:
<select id="gets" resultMap="resultMap">
select
<include refid="columns"/>
from tag
where deleted = 0
and id in
<foreach collection="ids" item="id" open="(" separator="," close=")">
#{id}
</foreach>
order by field(
id,
<foreach collection="ids" item="id" open="" separator="," close="">
#{id}
</foreach>
)
</select>
这个时候,查询的结果集就是按我指定的顺序来排列返回了!
看完文章,有任何疑问,请加入群聊一起交流!!!
很赞哦! ()
相关文章
- windows环境下mysql5.7绿色版安装教程
- MySQL赋予用户执行自定义Function的权限
- Mybatis调用MySQL存储过程图文教程
- mysql存储过程使用实例图文教程
- navicat for mysql 11.1 简体中文破解版免费下载
- MySQL不同版本创建用户语句差异
- MySQL数据库主键冲突的三种解决方案
- MySQL保存emoji表情失败的原因和解决方案
- MySQL字符集utf8、utf8mb4、utf8mb4_general_ci、utf8mb4_unicode_ci的区别
- Every derived table must have its own alias的原因和解决方案
标签云
猜你喜欢
- IntelliJ IDEA 2019.2已经可以利用补丁永久破解激活了
- IntelliJ IDEA 2019.3利用补丁永久破解激活教程
- IntelliJ IDEA高版本最灵活的永久破解激活方法(含插件激活,时长你说了算)
- Jetbrains全家桶基于ja-netfilter的最新破解激活详细图文教程
- IntelliJ IDEA 2022.1永久破解激活教程(亲测可用,持续更新)
- 分享几个正版 IntelliJ IDEA 激活码(破解码、注册码),亲测可用,持续更新
- ja-netfilter到底需不需要mymap,2021.3.2版本激活失效?
- 如何激活idea2022.1及以上版本中的插件(亲测可用)
- 【史上最全】IntelliJ IDEA最新2022.1版本安装和激活视频教学(含插件)
- IntelliJ IDEA 2022.2 版本最新2099年永久激活方法,亲测可用,也可以开启新UI了。
站点信息
- 网站程序:spring + freemarker
- 主题模板:《今夕何夕》
- 文章统计:篇文章
- 标签管理:标签云
- 微信公众号:扫描二维码,关注我们