在一个查询中使用ORDER BY FIELD和另一个(第二个)ORDER子句

时间:2013-04-16 15:30:50

标签: mysql sql-order-by

This question询问如何在MySQL中指定排序顺序。

我想要做的是有两个排序级别 - 第一个是我指定的顺序,然后剩余的非指定值将以正常方式排序。

我尝试的是:

    SELECT
        version_id,
        version_name
    FROM
        software_versions
    ORDER BY 
        FIELD(version_id, 133, 41, 88), 
        version_name ASC

但是会发生的是行按版本名称排序,然后是FIELD(从查询的结构向后排序)。

有可能做我要问的事吗?查找表相对较小(100行左右),所以我对使用ORDER BY FIELD的性能不太担心。

我是否需要将其作为UNION重新编写?

3 个答案:

答案 0 :(得分:3)

尝试颠倒顺序,以便0始终处于最后位置。

ORDER BY FIELD(version, 88, 41, 133) DESC,  version_name ASC

答案 1 :(得分:1)

我发现这个article解释了它。基本上,因为你没有指定所有的版本号,它将无法正常工作。解决方法是按字段函数排序,然后按字段本身排序。

ORDER BY FIELD(version, 88, 41, 133) DESC, version, version_name;

答案 2 :(得分:-1)

这是因为您没有在FIELD()函数中列出version_id的所有可能值。

这应该可行:

SELECT
    version_id,
    version_name
FROM
    software_versions
WHERE
    version_id IN (133, 41, 88)
ORDER BY 
    FIELD(version_id, 133, 41, 88), 
    version_name ASC