mySQL按某些值排序& DESC?

时间:2011-09-22 04:44:52

标签: php mysql sql

假设我有一个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.

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

谢谢。

3 个答案:

答案 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,你可以将你的答案读入一个数组,在顶部将你想要的元素弹出一个临时数组。按字母顺序对原始数组进行排序,然后添加临时数组。