在我的數據庫中,我將一個名爲「type」的字段存儲爲tinyInt,因爲我沒有那麼多類型,我決定不創建一個表來存儲所有這些類型的相應名稱。將整數(id)映射到文本字符串?
當我查詢我的表時,我希望這些類型被我存儲在php數組中的相應名稱替換。我想知道是否有一種方法可以在sql語句本身內部進行這種替換,而不是循環遍歷結果並對返回的結果行進行替換。
請問是這樣的,即使存在:
select *, map(type, {1=>'abc', 2 => 'xyz'}) from orders
在我的數據庫中,我將一個名爲「type」的字段存儲爲tinyInt,因爲我沒有那麼多類型,我決定不創建一個表來存儲所有這些類型的相應名稱。將整數(id)映射到文本字符串?
當我查詢我的表時,我希望這些類型被我存儲在php數組中的相應名稱替換。我想知道是否有一種方法可以在sql語句本身內部進行這種替換,而不是循環遍歷結果並對返回的結果行進行替換。
請問是這樣的,即使存在:
select *, map(type, {1=>'abc', 2 => 'xyz'}) from orders
的唯一方法(我確信)要做到這一點是使用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
。
實際上,在對比的是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