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

时间:2012-02-04 10:20:25

标签: mysql sql

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

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

这样的事情是否存在:

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

2 个答案:

答案 0 :(得分:20)

唯一的方法(我很确定)这样做是使用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

答案 1 :(得分:11)

实际上,与math.coffee的回答相反,实际上 在MySQL中将数字映射到文本的另一种方式 - 至少如果你的数字是连续的:

  

ELT()函数返回字符串列表的 N -th元素:str1 N = 1str2 if {{1 }}, 等等。如果 N 小于1或大于参数数量,则返回N = 2

示例:

NULL

<强>来源:

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