2012-02-07 46 views
3

こんにちは、私は自分のステータスを使用してドメインデータを注文しようとしています。ドメインステータスDOM_EXPまたはDOM_DAKTが適用される前にドメインステータスDOM_HELDが適用されるため、このステータスの1つがDOM_HELDになる前にドメインを持っていますMySQLの注文フィールド

このデータはどのように注文できますか?選択は私だけDOM_DAKTがDOM_EXP behingされていることを達成するための下方に設けられたが、私はそれがexp_date

SELECT domain_id, status, exp_date 
FROM domains 
ORDER BY 
field (status, 'DOM_DEL', 'DOM_HELD', 'DOM_EXP', 'DOM_DAKT'), 
exp_date ASC; 

+-----------+----------+---------------------+ 
| domain_id | status | exp_date   | 
+-----------+----------+---------------------+ 
|   2 | DOM_DEL | 2012-02-02 10:47:33 | 
|   4 | DOM_HELD | 2012-02-02 10:47:38 | 
|   5 | DOM_HELD | 2012-02-02 10:47:40 | 
|   7 | DOM_HELD | 2012-02-02 10:47:44 | 
|   1 | DOM_EXP | 2012-02-02 10:47:27 | 
|   3 | DOM_EXP | 2012-02-02 10:47:35 | 
|   6 | DOM_EXP | 2012-02-02 10:47:42 | 
|  54 | DOM_DAKT | 2012-02-02 10:47:39 | 
+-----------+----------+---------------------+ 

結果が注文した、どこかの間になりたい使用」で最初にこの

+-----------+----------+---------------------+ 
| domain_id | status | exp_date   | 
+-----------+----------+---------------------+ 
|   2 | DOM_DEL | 2012-02-02 10:47:33 | 
|   4 | DOM_HELD | 2012-02-02 10:47:38 | 
|   5 | DOM_HELD | 2012-02-02 10:47:40 | 
|   7 | DOM_HELD | 2012-02-02 10:47:44 | 
|   1 | DOM_EXP | 2012-02-02 10:47:27 | 
|   3 | DOM_EXP | 2012-02-02 10:47:35 | 
|  54 | DOM_DAKT | 2012-02-02 10:47:39 | 
|   6 | DOM_EXP | 2012-02-02 10:47:42 | 
+-----------+----------+---------------------+ 
+0

は、期待される結果の最後の行で、 'DOM_DAKT'を意味しますか? – Corubba

+0

@BloodyWorld:DOM_EXPとDOM_DAKTのnoは、等しいので、exp_dateによる注文を適用する必要があります。 – nabizan

答えて

2

注文のようでなければなりませんDOM_EXPDOM_DAKTが等しいランクであるとみなされるステータスの「ランク」です。その後、ステータス

SELECT domain_id, status, exp_date 
FROM domains 
ORDER BY CASE WHEN status = 'DOM_DEL' THEN 1 
       WHEN status = 'DOM_HELD' THEN 2 
       WHEN status = 'DOM_EXP' THEN 3 
       WHEN status = 'DOM_DAKT' THEN 3 -- EXP and DAKT are "of equal rank" 
END, 
EXP_DATE 

マッピングなどCASE表現を見status =>ordering rank

0

の各「ランク」内EXP_DATEによって順序が単に声明からDROP_EXPDOM_DAKTをドロップします。

DOM_EXPDOM_DAKTが唯一の他の状態であると仮定しています
SELECT domain_id, status, exp_date 
FROM domains 
ORDER BY 
field (status, 'DOM_DEL', 'DOM_HELD'), 
exp_date ASC; 

+0

他のステータスがあるので、私はそれを行うことができません.Lukas Ederに答えてください – nabizan