将整数(id)映射到文本字符串?

mr1*_*011 20 mysql sql

在我的数据库中,我将一个名为"type"的字段存储为tinyInt,因为我没有那么多类型,所以我决定不创建一个表来存储所有这些类型的相应名称.

当我查询我的表时,我希望将类型替换为我在php数组中存储的相应名称.我想知道是否有办法在sql语句本身内进行此替换,而不是循环遍历结果并在返回的结果行上进行替换.

这样的事情是否存在:

select *, map(type, {1=>'abc', 2 => 'xyz'}) from orders
Run Code Online (Sandbox Code Playgroud)

mat*_*fee 25

唯一的方法(我很确定)这样做是使用一个CASE .. WHEN ...构造:

SELECT *, CASE type WHEN 1 THEN 'abc' WHEN 2 THEN 'xyz' END as stringType
FROM orders
Run Code Online (Sandbox Code Playgroud)

您还可以使用该ELSE子句指定默认值,例如CASE type WHEN 1 THEN 'abc' WHEN 2 THEN 'xyz' ELSE 'unknown' END.


Ste*_*ler 13

实际上,与math.coffee的答案相反,MySQL 实际上还有另一种方法可以将数字映射到文本 - 至少如果你的数字是连续的:

ELT()函数返回字符串列表的第N个元素:str1if N = 1,str2if N = 2,等等.返回NULL如果Ñ比的参数的数目大于小于1或.

例:

mysql> SELECT ELT(1, 'ej', 'Heja', 'hej', 'foo');
        -> 'ej'
mysql> SELECT ELT(4, 'ej', 'Heja', 'hej', 'foo');
        -> 'foo'
Run Code Online (Sandbox Code Playgroud)

资源:

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