2010-04-25 227 views
1

我有一個結果集可以說10個結果。 其中3個有'Pears'類型,接下來的3個有'蘋果'類型,接下來的3個有'香蕉'類型。最後的記錄有一種'擠壓設備' - 與水果無關。 如何以GROUPED順序返回這組結果(也用於分頁),我指定的是沒有使用任何固有的排序因子如ALPHABETA或ID等? 在運行代碼之前,我擁有所有類型,以便可以指定它們。 即在結果集中排序MySQL結果

ID | Bananas 
ID | Bananas 
ID | Bananas 
ID | Apples 
ID | Apples 
ID | Apples 
ID | Pears 
ID | Pears 
ID | Pears 
ID | Squeezing Equipment 

回答

1

使用order by子句。如果你想「擠壓設備」來一次使用這種來:

ORDER BY CASE name 
    WHEN 'Bananas' THEN 1 
    WHEN 'Apples' THEN 2 
    WHEN 'Pears' THEN 3 
    WHEN 'Squeezing Equipment' THEN 4 
    END 
+0

會這樣工作:ORDER BY type ='Bananas',name ='Apples',name ='梨',名字? (或類似的東西) – InnateDev 2010-04-25 14:19:20

+0

@InnateDev:是的,它會工作,除非它會以相反的順序給出比你想要的結果。或者你可以使用CASE - 我已經更新了我的答案。 – 2010-04-25 14:21:57

+0

非常靈活的解決方案,你不會說嗎? – InnateDev 2010-04-25 16:18:52

0

這將排序所有不Squeezing Equipment按字母順序排列第一的類型:

select ID, Type 
from MyTable 
order by case when Type = 'Squeezing Equipment' then 1 else 0 end, Type 

如果你有一個以上的非果型,你可以這樣做:

select ID, Type 
from MyTable 
order by case when Type in ('Squeezing Equipment', 'some other type') then 1 else 0 end, Type 
0

不是一個簡單的ORDER BY和GROUP BY實現這個嗎?或者我錯過了什麼?

SELECT ID, Type FROM TheFruityTable 
GROUP BY Type 
ORDER BY Type; 
+0

這將是理想的,它只是在查詢中的最後一個順序將由類型的字母順序,我需要指定什麼是要先。即香蕉必須先於蘋果,然後纔是梨。 – InnateDev 2010-04-25 14:15:45

+0

啊,我現在明白了。爲什麼不添加交叉引用類型並指定排序順序的另一個表? – 2010-04-25 14:25:58