2012-02-04 61 views
12

在我的數據庫中,我將一個名爲「type」的字段存儲爲tinyInt,因爲我沒有那麼多類型,我決定不創建一個表來存儲所有這些類型的相應名稱。將整數(id)映射到文本字符串?

當我查詢我的表時,我希望這些類型被我存儲在php數組中的相應名稱替換。我想知道是否有一種方法可以在sql語句本身內部進行這種替換,而不是循環遍歷結果並對返回的結果行進行替換。

請問是這樣的,即使存在:

select *, map(type, {1=>'abc', 2 => 'xyz'}) from orders 

回答

18

的唯一方法(我確信)要做到這一點是使用CASE .. WHEN ...結構:

SELECT *, CASE type WHEN 1 THEN 'abc' WHEN 2 THEN 'xyz' END as stringType 
FROM orders 

您也可以使用ELSE子句來指定默認值,例如CASE type WHEN 1 THEN 'abc' WHEN 2 THEN 'xyz' ELSE 'unknown' END

7

實際上,在對比的是mathematical.coffee答案,實際上在MySQL另一種方式來映射電話號碼發短信 - 至少,如果你的號碼是連續的:

ELT()函數返回N字符串列表中的第 - 個元素:str1如果N = 1,str2如果N = 2等等。返回NULL如果小於1或大於參數個數。

實施例:

mysql> SELECT ELT(1, 'ej', 'Heja', 'hej', 'foo'); 
     -> 'ej' 
mysql> SELECT ELT(4, 'ej', 'Heja', 'hej', 'foo'); 
     -> 'foo' 

來源:

https://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_elt

相關問題