0

我知道我可以ORDER BY像这样使用查询中的一行:

SELECT IF(`category` IS NOT NULL,`category`,"Uncategorized") AS `category` FROM `table` ORDER BY `category`="Uncategorized" DESC

这将使第一行始终包含“未分类”,但是我有多行包含它,我也想浮出水面。以下是两组返回数据的示例:

我得到了什么:

Uncategorized
Science
Health
Uncategorized
Wellness

我想要的是:

Uncategorized
Uncategorized
Health
Science
Wellness

我尝试了许多其他的东西,包括 aCASE并且还使用了 conditional IF。我究竟做错了什么?

4

3 回答 3

1

它不起作用的原因是该ORDER BY子句与列名进行比较,category而不是与列上给出的别名进行比较。

SELECT IF(category IS NOT NULL,category,'Uncategorized') category
FROM   `table` 
ORDER  BY IF(category IS NOT NULL,category,'Uncategorized')='Uncategorized' DESC

您可以选择使用COALESCEIFNULL使其更短

SELECT COALESCE(category, 'Uncategorized') category
FROM   `table` 
ORDER  BY COALESCE(category, 'Uncategorized') = 'Uncategorized' DESC, category
于 2013-05-18T06:00:04.570 回答
0

您需要在ORDER BY子句中使用该函数。

SELECT IF(`category` IS NOT NULL,`category`,"Uncategorized") AS `category`
  FROM `table`
  ORDER BY IF(`category` IS NOT NULL,`category`,"Uncategorized")="Uncategorized" DESC
于 2013-05-18T06:00:17.777 回答
0

您可以通过创建自定义订购FIELD()

...
ORDER BY FIEID(category, 
    'Uncategorized',
    'Health',
    'Science'
    'Wellness')

FIELD()函数返回第一个参数在其他参数中的索引。

于 2013-05-18T06:05:45.390 回答