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数据库。