前言:
笔者在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>