mysql 按字段排序,空值最后

2022-08-30 23:10:12

我在按子句的顺序使用 FIELD 函数时遇到了问题。

我的情况是产品可以有三个类别,用户可以选择要首先显示的类别。因此,可以形成三种可能的查询。这些是:

查询 1

SELECT 
    *
FROM
    my_table
WHERE
    main_categories_id = 2
ORDER BY FIELD(product_condition,
        'graded',
        'new',
        'used');

查询 2

SELECT 
    *
FROM
    my_table
WHERE
    main_categories_id = 2
ORDER BY FIELD(product_condition,
        'new',
        'graded',
        'used');

查询 3

SELECT 
    *
FROM
    my_table
WHERE
    main_categories_id = 2
ORDER BY FIELD(product_condition,
        'used',
        'new',
        'graded');

当产品条件为 NULL 时,这不能很好地工作,因为它始终首先显示具有 NULL 值的行。我需要这些出现在最后。

我尝试将NULL添加到FIELD函数,但这似乎不起作用。

有谁知道我能做到这一点的方法吗?

感谢您的帮助。


答案 1

您可以:

  1. 首先按列是否为显式排序,然后按其值显式排序:NULL

    ORDER BY product_condition IS NULL, FIELD(...)
    

    这有效,因为对于非列,将为0,对于列,将为1;在(默认)升序中,前者显然会排在第一位。product_condition IS NULLNULLNULL

  2. 依靠在降序中最后排序的事实,并将参数反转为:NULLFIELD()

    ORDER BY FIELD(product_condition, ...) DESC
    

答案 2

您应该使用“按字段排序”在末尾显示空值。


推荐