0

这个问题询问有关在 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 进行返工?

4

3 回答 3

3

尝试颠倒顺序,因此0将始终处于最后一个位置。

ORDER BY FIELD(version, 88, 41, 133) DESC,  version_name ASC
于 2013-04-16T15:36:51.193 回答
1

我发现这篇文章解释了它。基本上,因为您没有指定所有版本号,所以它不起作用。解决方法是按字段函数排序,然后是字段本身。

ORDER BY FIELD(version, 88, 41, 133) DESC, version, version_name;
于 2013-04-16T15:41:31.303 回答
-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
于 2013-04-16T15:43:52.087 回答