我在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
你可以:
明确排序首先由列是否NULL和然后通过它的价值:
ORDER BY product_condition IS NULL, FIELD(...)
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为product_condition IS NULL非NULL列为0,列为1 NULL; 并且在(默认)升序中,前者显然会先来.
依赖于NULL按降序排序的事实并将参数反转为FIELD():
ORDER BY FIELD(product_condition, ...) DESC
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
10112 次 |
| 最近记录: |