2014-08-28 50 views
0

不知道標題是否是現貨,因爲我不能提供更好的描述。我會盡力在此澄清,但這有點棘手。IF中的多個IF在MySQL中的順序子句

我正在開發一個訂單系統,帶有手柄箱。每個案例可以分爲幾個階段,但並不總是如此。所有的情況都會在某個時候達到「生產中」狀態。 「正在生產」狀態下有兩個不帶階段的日期和兩個日期,分別爲 階段 - 一個用於生產時的截止日期和一個用於實際投入生產的時間。

現在,這給了我4個日期,我需要通過訂購我的查詢。

我的問題是,「生產中」的情況應該是在一起訂購,而不是「在生產中」的情況應該一起訂購,不管是否有階段性情況。我只需要根據不同的情況來查看不同的領域。

我該怎麼做?

我會嘗試製作一張圖片,使其更容易理解。

enter image description here e21,e23,r532i和r571a都是日期,應該按日期排序。

+1

而不是這麼多的理論......請出示一個示例模式,輸入和預期的輸出.... *理論都是從你的榜樣無聊,說實話* – NoobEditor 2014-08-28 09:39:26

回答

0

您可以使用多個if來進行選擇和排序。但是,在大數據量時,它可能會變得效率低下。

例子:

select id, if(id < 2, if (id > 6, 7, 8), 4) 
from a 
order by if(id < 2, if (id > 6, 7, 8), 4); 

+----+------------------------------------+ 
| id | if(id < 2, if (id > 6, 7, 8), 4) | 
+----+------------------------------------+ 
| 2 |         4 | 
| 3 |         4 | 
| 4 |         4 | 
| 5 |         4 | 
| 6 |         4 | 
| 11 |         4 | 
| 12 |         4 | 
| 13 |         4 | 
| 1 |         8 | 
+----+------------------------------------+ 
+0

有了靈感,我做了這個: 'IF(e.e3 IS NULL,IF(o5.r571!= 1,o5.r532i,o5.r571a),IF(e.e22!= 1,e.e21,e.e23))ASC ' 它似乎工作,但我有最重要的一個問題。 現在返回此: 0000-00-00 0000-00-00 2014年2月15日 2014年3月4日 我可以把那些記錄0000-00-00在BUTTOM,並仍具有按有效日期升序排序? – Mhystique 2014-08-28 11:59:17

+0

您可以使用其他IFNULL(,'2035-01-01')將您的訂單劃分爲括號,以便在空值的情況下使用未來訂購日期。 – 2014-08-29 13:05:14