在我的数据库中,我将一个名为“type”的字段存储为tinyInt,因为我没有那么多类型,所以我决定不创建一个表来存储所有这些类型的相应名称。
当我查询我的表时,我希望将类型替换为我存储在php数组中的相应名称。我想知道是否有办法在sql语句本身内进行此替换,而不是循环遍历结果并在返回的结果行上进行替换。
这样的事情是否存在:
select *, map(type, {1=>'abc', 2 => 'xyz'}) from orders
答案 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 = 1
,str2
if {{1 }}, 等等。如果 N 小于1或大于参数数量,则返回N = 2
。
示例:强>
NULL
<强>来源:强>
https://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_elt