记录关于mysql的问题和解决方法

1.怎么在select in(….) 各种id或者字母 查询时候按照查询的顺序排列。
比如查询的id的顺序是 in(7463,7459,7953,7978,500,7878,7739,8198,7935,7935,37,33,7896,8322,8326,6893)
查询的结果自动的会排好顺序,(33,37…),不能按照查询的顺序排列。
这个时候就需要 order by FIELD 里面 FIELD的函数方法。直接上代码

    <select id="getActivityGoods" resultType="com.joypay.domain.ActivityGoods">
        <![CDATA[
            select sg.name goodsName,sgp.id goodsId,sg.pic pic,
                   ROUND(sgp.disprice / 100, 2) disprice,ROUND(sgp.marketprice / 100, 2) marketprice
            from sc_goods sg
            inner join sc_goods_price sgp on sg.id = sgp.goodsid
        ]]>
        <where>
            <if test="signs !=null and signs != ''">
                and sgp.id in
                <foreach item="item" index="index" collection="signs" open="(" separator="," close=")">
                    #{item,jdbcType=BIGINT}
                </foreach>
            </if>
        </where>
        <if test="signs !=null and signs != ''">
            order by FIELD
            <foreach item="item" index="index" collection="signs" open="(sgp.id," separator="," close=")">
                #{item,jdbcType=BIGINT}
            </foreach>
        </if>
    </select>

这里用的是mybatis。

sql语句就变成了:

select sg.name goodsName,sgp.id goodsId,sg.pic pic,
       ROUND(sgp.disprice / 100, 2) disprice,ROUND(sgp.marketprice / 100, 2) marketprice
from sc_goods sg
inner join sc_goods_price sgp on sg.id = sgp.goodsid
where sgp.id in (7463,7459,7953,7978,500,7878,7739,8198,7935,7935,37,33,7896,8322,8326,6893)
order by FIELD(sgp.id,7463,7459,7953,7978,500,7878,7739,8198,7935,7935,37,33,7896,8322,8326,6893)

记得在FIELD方法里面第一个为需要排序的字段名,不要忘记了,要不没效果。

文章来源: 记录关于mysql的问题和解决方法

人吐槽 人点赞

猜你喜欢

发表评论

用户名: 密码:
验证码: 匿名发表

你可以使用这些语言

查看评论:记录关于mysql的问题和解决方法