我不完全確定如何標題這個問題,很難描述我在標題中的含義。基本上我所擁有的是枚舉狀態碼,我正在尋找一種簡單的方法將這些映射到查詢中的數據。在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...
當你說做一個表是不可能做你的意思做任何對象,即功能,用戶定義的變量(在這種情況下是數組)? – Ben 2011-12-28 14:08:49
不,我的意思是將狀態定義移動到表中是不可能的。 – Rob 2011-12-28 14:21:30
也許臨時表會工作,不確定性能權衡,但這主要是後端的東西,所以表現並不是真正的問題... – Rob 2011-12-28 14:23:19