假设我有一个mySQL表,其中有一个名为“name”的字段
此字段每行包含一个名称。
有10行:
Apple
Pear
Banana
Orange
Grapefruit
Pineapple
Peach
Apricot
Grape
Melon
如何形成查询,以便从表中选择,我希望详细信息显示如下:
Peach
Apple
Apricot
... and then everything else is listed by descending order.
所以基本上我想在列表的顶部显示一些指定的结果,然后其他结果按降序显示。
谢谢。
答案 0 :(得分:6)
你可以这样做:
select *
from fruit
order by
case name
when 'Peach' then 1
when 'Apple' then 2
when 'Apricot' then 3
else 4
end,
name
这应该适用于任何SQL数据库。
答案 1 :(得分:1)
您可以使用IF()功能对条件进行排序。 IF()
州的文档:
IF(expr1,expr2,expr3)
如果expr1为TRUE(expr1<> 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”将位于列表的顶部。该系列中的第二个排序指定了如何打破第一种排序的关系。在这种情况下,所有元素都会在第一个排序中将'Peach'绑定为值“1”。在这种情况下,“Apple”被推到了领带列表的顶部,这实际上是总列表中的第二位。等等......最后一个'名称DESC'。
正如其他答案所指出的那样,CASE()是一系列IF()
s的替代品:
CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END
第一个版本返回value = compare_value的结果。该 第二个版本返回第一个条件的结果 真正。如果没有匹配的结果值,则ELSE后的结果为 返回,如果没有ELSE部分,则返回NULL。
答案 2 :(得分:-1)
由于你使用的是php,你可以将你的答案读入一个数组,在顶部将你想要的元素弹出一个临时数组。按字母顺序对原始数组进行排序,然后添加临时数组。