mybatis和mysql 按in的参数顺序排序

前言:

笔者在elasticsearch中查询出来的文章id,需要在mysql中连表查询,但是输出默认是按照主键id排序的,我是想按照es输出的id排序,毕竟es全文检索的内容是越像权值越大越在前面。所以笔者需要按in的参数顺序排序。

1.按in的参数顺序排序,mysql中用field()函数,mybatis用foreach

在mysql中按in的参数顺序排序其实很简单,只要用到field()函数就可以了

SELECT
        a.article_id,
        a.title,
        a.create_time,
        a.simple_content
    from
        article a
    where
        a.article_id in (
            1028 , 1025 , 1027 
        )  
        and a.flag = 1 
				order by field(article_id, 1028 , 1025 , 1027);

效果:
在这里插入图片描述

2.mybatis中按照in的参数排序,

这里有个注意的点就是需要判断参数list的值是否存在,
而且由于参数是list,所以比较的时候是list.size>0而不是list!=" "

SELECT a.article_id,a.title,a.create_time,a.simple_content,a.page_view,a.point_count
        from article a
        where a.article_id in
            <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
                #{item}
            </foreach>
        <if test="list!= null and list.size>0">
            order by field( article_id,
            <foreach collection="list" index="index" item="item" separator="," close=")">
                #{item}
            </foreach>
        </if>
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高并发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值