Php mysql按字段排序,最后为空值

Php mysql按字段排序,最后为空值,php,mysql,Php,Mysql,我在ORDERBY子句中使用FIELD函数时遇到了一个问题 我的情况是,一个产品可以有三个类别,用户可以选择首先显示哪个类别。因此,可以形成三种可能的查询。这些是: 查询1 SELECT * FROM my_table WHERE main_categories_id = 2 ORDER BY FIELD(product_condition, 'graded', 'new', 'used'); 查询2 SELECT

我在ORDERBY子句中使用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函数中,但这似乎不起作用

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

谢谢您的帮助。

您可以:

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

    按产品订购\u条件为空,字段(…)
    
    这是因为
    product\u条件为空
    对于非
    NULL
    列将为0,对于
    NULL
    列将为1;在(默认)升序中,前者显然会排在第一位

  • 依赖于
    NULL
    按降序排列在最后的事实,并将参数反转为
    FIELD()

    按字段订购(产品条件…)说明
    

  • 应使用“按字段描述排序”在末尾显示空值

    试试这个

    SELECT * FROM my_table WHERE main_categories_id = 2 ORDER BY CASE WHEN  product_condition IS NULL THEN 1 ELSE 0 END,FIELD( product_condition, "graded", "new", "used" );
    
    其他两个相同…

    最后一个为空。 实际表格

    +------+---------+ | col1 | col2 | +------+---------+ | 1 | Closed | | 2 | Open | | 3 | Pending | | 4 | New | | 5 | NULL | | 6 | Closed | | 7 | New | | 8 | NULL | +------+---------+ +------+---------+ |col1 | col2| +------+---------+ |1 |关闭| |2 |打开| |3 |待定| |4 |新| |5 |零| |6 |关闭| |7 |新| |8 |零| +------+---------+ 当col2为空时,从testing2 order by case中选择*然后选择1,否则0结束,字段(col2,'New','Open','Closed','Pending')


    +------+---------+ |col1 | col2| +------+---------+ |4 |新| |7 |新| |2 |打开| |1 |关闭| |6 |关闭| |3 |待定| |5 |零| |8 |零| +------+---------+


    +------+---------+ | col1 | col2 | +------+---------+ | 4 | New | | 7 | New | | 2 | Open | | 1 | Closed | | 6 | Closed | | 3 | Pending | | 5 | NULL | | 8 | NULL | +------+---------+