在我的数据库中,我将一个名为"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个元素:str1ifN = 1,str2ifN = 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