2012-02-07 117 views
3

嗨即時嘗試使用其狀態來訂購域數據。正如你可能知道的,域名狀態DOM_EXP或DOM_DAKT適用於域命中DOM_HELD之前,因此我不在乎這個狀態之一有一個域之前它成爲DOM_HELDMySQL按字段排序

我如何訂購這些數據?使用select提供以下我只做到這一點DOM_DAKT是behing DOM_EXP,但我希望它是介於兩者之間,通過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 2012-02-07 16:59:53

+0

@BloodyWorld:DOM_EXP和DOM_DAKT上的no應該只應用exp_date命令,因爲它們相等 – nabizan 2012-02-07 17:02:07

回答

2

訂購第一「等級「,其中DOM_EXPDOM_DAKT被認爲是相同的等級。然後通過EXP_DATE每個狀態

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

只需從語句刪除DROP_EXPDOM_DAKT

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

這是假設DOM_EXPDOM_DAKT是唯一的其他狀態。

+0

我不能這麼做,因爲還有其他狀態,請參閱Lukas Eder answen – nabizan 2012-02-07 19:41:56