2011-09-22 134 views
5

假設我有一個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. 

所以基本上我想在列表頂部顯示一些指定的結果,然後按降序顯示其餘結果。

謝謝。

回答

-1

由於您使用的是PHP,因此您可以將您的答案讀入數組中,在頂部彈出想要的元素,將它們存儲在臨時數組中。按字母順序對原始數組進行排序,然後添加臨時數組。

1

您可以使用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。

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數據庫。