2011-11-09 8 views
1

を売却しました。私はsort_it ASC BY ORDER上のソートclausuleを設定すると、私は SOLDとON sort_in列 OF 、そしての値とアイテムを取得します。 しかし、私はシーケンスが必要ですONOFF売りますです。は、OFF、I 3つのデータベースに一列になり得る値は以下を有する

何とかしてください。私は...データをデータベースに保存する方法を編集することが要求されることを意味するので、私はこれを最後の瞬間にやります。

+0

文字列ではなく、列挙型です。 –

答えて

7

はいあなたはこのようにカスタムデータソーティングを使用することができます。

SELECT * FROM table ORDER BY FIELD(`sort_it`,'ON','OFF','SOLD'),`sort_it` 
+0

これは '、 'ON'、 'OFF'、 'SOLD'です。そうでなければ+1。 – mellamokb

+0

大丈夫、ありがとう。私はそれを修正した。 – Oyeme

+0

mellamokbの順番を修正しました –

-2
SELECT t.*, IF(sort_it='ON',1,IF(sort_it='OFF',2,3)) as new_sort FROM Table AS t ORDER by new_sort ASC 

MySQLのマニュアルに関するコメントから、別の解決策:

あなたは CASEステートメントを使用することができます

http://dev.mysql.com/doc/refman/5.0/en/sorting-rows.html

select * from tablename order by priority='High' DESC, priority='Medium' DESC, priority='Low" DESC; 
+0

@Marcus:私は2つの答えをマージしました。 – netmano

+0

あなたの最初の解決策は、各 'IF'ステートメントで'; '区切り記号の代わりに'、 'を必要とします:http://sqlize.com/2vJ5f5t5pR – mellamokb

+0

@mellamokb:本当に、編集、ありがとう。 – netmano

2

基本的な値からカスタム注文シーケンスを生成するには、li KEこの:

ORDER BY 
    CASE sort_it 
     WHEN 'ON' then 1 
     WHEN 'OFF' then 2 
     WHEN 'SOLD' then 3 
    END 

サンプルデモ:文字列を使用してhttp://sqlize.com/MGz6lLb0Qk

1

は一般的に悪い考えです。数値型を使用する方がよいでしょう。次に、ON = 1、OFF = 2、SOLD = 3とし、並べ替えます。

+1

を使用するか、タイプ:ENUMを使用してください(バックグラウンドで)数値ですが、http://dev.mysql.com/doc/refman/5.0/en/enumでも文字列ラベルを扱うことができます。 html – netmano

関連する問題