2011-12-28 65 views
0

我不完全確定如何標題這個問題,很難描述我在標題中的含義。基本上我所擁有的是枚舉狀態碼,我正在尋找一種簡單的方法將這些映射到查詢中的數據。在SQL /映射狀態代碼中翻譯枚舉數據

例如,假設我在某處定義了以下內容。他們是我的控制,是不是在數據庫:

CODE  STATUS 
---------------- 
1  = ACTIVE 
2  = SUSPENDED 
3  = CLOSED 
4  = CANCELED 
5  = ETC... 

SELECT item_title, status_code FROM mytable WHERE foo='bar';

的整數代碼存儲在數據庫中,但也有經常情況下,這將是有益的,如果我可以讓MySQL的認識他們翻譯的內容,特別是對於分類,但是在許多其他時候,這會有所幫助。我知道這是可以做到這樣的事情:

SELECT item_title, 
    IF(status_code=1,'ACTIVE', 
     IF(status_code=2,'SUSPENDED', 
      IF(status_code=3,'CLOSED', 
       IF(status_code=3,'CANCELED', ...) 
      ) 
     ) 
    ) AS real_status 
FROM mytable WHERE foo='bar'; 

但這是繁瑣的,難看,而且容易出錯,而且在某些情況下,我可能有50級或更多的代碼所以這通常不是一個解決方案。理想情況下,我會將表中的代碼定義加入到表中,但這不是一個選項。

我希望有一些MySQL功能或技術,我不知道這將解決此問題。

編輯: 爲了澄清,狀態代碼未在數據庫中定義,它們在代碼中定義。我可以在查詢後翻譯代碼中的狀態,但這並不理想。從本質上講,我問,如果有一種方法在sql中做到這一點:

SELECT $statushash[tbl.status_code] AS real_status FROM mytable AS tbl...

+0

當你說做一個表是不可能做你的意思做任何對象,即功能,用戶定義的變量(在這種情況下是數組)? – Ben 2011-12-28 14:08:49

+0

不,我的意思是將狀態定義移動到表中是不可能的。 – Rob 2011-12-28 14:21:30

+0

也許臨時表會工作,不確定性能權衡,但這主要是後端的東西,所以表現並不是真正的問題... – Rob 2011-12-28 14:23:19

回答

2

假設你不能創建一個查找表,我能想到的兩種可能性:

1,創建一個user-defined function。但是,在MySQL中創建UDF的restrictions相當嚴格。

2.創建view模擬查找表 - 這樣的事情:

CREATE VIEW v_enum_lookup AS 
select 1 as status_code, 'ACTIVE' as status_description UNION ALL 
select 2 as status_code, 'SUSPENDED' as status_description UNION ALL 
... 

(等)