Php mysql按字段排序,最后为空值
我在ORDERBY子句中使用FIELD函数时遇到了一个问题 我的情况是,一个产品可以有三个类别,用户可以选择首先显示哪个类别。因此,可以形成三种可能的查询。这些是: 查询1Php 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
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 | +------+---------+