2011-09-22 24 views
5

「名前」という名前のフィールドを持つmySQLテーブルがあります。mySQLを特定の値で順序付けしてからDESC?

このフィールドには、1行に1つの名前が含まれています。

10行ありますので、基本的に私がしたい

Peach 
Apple 
Apricot 
... and then everything else is listed by descending order. 

Apple 
Pear 
Banana 
Orange 
Grapefruit 
Pineapple 
Peach 
Apricot 
Grape 
Melon 

がどのように私は、私はテーブルから選択するクエリを形成することになるが、私は詳細は、次のように表示したいですリストのTOPにいくつかの指定された結果を表示し、残りの結果を降順で表示します。

ありがとうございます。

答えて

-1

あなたはPHPを使用しているので、答えを配列に読み込んで、上にある要素をポップアップして一時配列に格納することができます。元の配列をアルファベット順にソートし、テンポラリ配列の前に追加します。

1

IF()機能を使用して条件付きでソートすることができます。 IF()状態のドキュメント:

IF(expr1,expr2,expr3)

expr1がTRUEである場合には(expr1の<> 0とexpr1の<> NULL)をIF()は expr2のを返します。それ以外の場合は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"がリストの先頭になることを保証します。シリーズの2番目のソートは、最初のソートのためにタイを解除する方法を指定します。この場合、すべての要素は値 '1'の最初のソートで 'Peach'タイを排除します。そして、この場合、「Apple」は、実際には総合リストの第2位である同調リストのトップにプッシュされます。 Etc ...終わりまで最後の 'DESC名前'。

他の答えが指摘するように、CASE()IF() Sの一連の代替物である:

CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END

最初のバージョンは、値= compare_value結果を返します。 2番目のバージョンは、最初の条件が の場合の結果を返します。一致する結果値がなかった場合、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データベースで作業する必要があります。

6

あなたはこのような何かを行うことができます。

関連する問題