mySQL order by certain values&then DESC?

问题描述:

假设我有一个mySQL表,其中有一个名为“name”的字段mySQL order by certain values&then DESC?

此字段每行包含一个名称。

有10行:

Apple 
Pear 
Banana 
Orange 
Grapefruit 
Pineapple 
Peach 
Apricot 
Grape 
Melon 

我怎么会形成一个查询,所以我从表中选择,我想细节显示是这样的:

Peach 
Apple 
Apricot 
... and then everything else is listed by descending order. 

所以基本上我想在列表顶部显示一些指定的结果,然后按降序显示其余结果。

谢谢。

由于您使用的是PHP,因此您可以将您的答案读入数组中,在顶部弹出想要的元素,将它们存储在临时数组中。按字母顺序对原始数组进行排序,然后添加临时数组。

您可以使用IF()函数对条件进行排序。为IF()状态的文档:

IF(expr1,expr2,expr3)

如果expr1 TRUE(表达式1 <> 0且expr1的<> NULL)然后IF()返回 表达式2;否则它返回expr3。 IF()返回数值或字符串值 ,具体取决于使用它的上下文。

所以,你可以用它特定的元素,在这样的顶部进行排序:

SELECT * 
FROM fruit 
ORDER BY 
    IF(name = 'Peach', 0, 1), 
    IF(name = 'Apple', 0, 1), 
    IF(name = 'Apricot', 0, 1), 
    name DESC 

这是一系列的命令,与第一服用最高优先级。因此,如果name='Peach'的值为0,则对于所有其他值,该值将为1.由于默认的ASC顺序,0在1之前,因此确保“Peach”将位于列表的顶部。系列中的第二类指定如何打破第一类的关系。在这种情况下,所有元素在第一种类型中将'桃'绑定为值'1'。在这种情况下,“苹果”被推到了领先名单的榜首,实际上这是排行榜中的第二位。等......直到最后一个'名字DESC'。

作为其他答案指出,CASE()是一系列IF()秒的替代:

CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END

第一个版本的返回结果中值= COMPARE_VALUE。 第二个版本返回第一个条件的结果,即 为true。如果没有匹配的结果值,ELSE后面的结果是 ,如果没有ELSE部分,则返回NULL。

你可以做这样的事情:

select * 
from fruit 
order by 
    case name 
     when 'Peach' then 1 
     when 'Apple' then 2 
     when 'Apricot' then 3 
     else 4 
    end, 
    name 

这应该在任何SQL数据库。