mysql按字段顺序排列,最后是NULL值

Dav*_*nes 14 php mysql

我在order by子句中使用FIELD函数时遇到了问题.

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

查询1

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

查询2

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

查询3

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

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

我试过在FIELD函数中添加NULL,但这似乎不起作用.

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

谢谢你的帮助.

egg*_*yal 23

你可以:

  1. 明确排序首先由列是否NULL然后通过它的价值:

    ORDER BY product_condition IS NULL, FIELD(...)
    
    Run Code Online (Sandbox Code Playgroud)

    这是有效的,因为product_condition IS NULLNULL列为0,列为1 NULL; 并且在(默认)升序中,前者显然会先来.

  2. 依赖于NULL按降序排序的事实并将参数反转为FIELD():

    ORDER BY FIELD(product_condition, ...) DESC
    
    Run Code Online (Sandbox Code Playgroud)