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

Mysql 是否将整数(id)映射到文本字符串?,mysql,sql,Mysql,Sql,在我的数据库中,我将一个名为“type”的字段存储为tinyInt,因为我没有那么多类型,所以我决定不创建一个表来存储所有这些类型的对应名称 当我查询我的表时,我希望将类型替换为它们对应的名称,这些名称存储在php数组中。我想知道是否有一种方法可以在sql语句本身内部进行替换,而不是在结果中循环并在返回的结果行上进行替换 这样的事情真的存在吗 select *, map(type, {1=>'abc', 2 => 'xyz'}) from orders 要做到这一点,唯一的方法(我

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

当我查询我的表时,我希望将类型替换为它们对应的名称,这些名称存储在php数组中。我想知道是否有一种方法可以在sql语句本身内部进行替换,而不是在结果中循环并在返回的结果行上进行替换

这样的事情真的存在吗

select *, map(type, {1=>'abc', 2 => 'xyz'}) from orders
要做到这一点,唯一的方法(我相当肯定)是使用构造:

SELECT *, CASE type WHEN 1 THEN 'abc' WHEN 2 THEN 'xyz' END as stringType
FROM orders

您还可以使用
ELSE
子句指定默认值,例如
案例类型,当1之后是'abc',当2之后是'xyz',否则是'unknown'END

事实上,与mathematic.coffee给出的答案不同,MySQL中实际上有另一种将数字映射到文本的方法——至少在数字连续的情况下:

函数返回字符串列表的第N个元素:
str1
if
N=1
str2
if
N=2
,依此类推。如果N小于1或大于参数数,则返回
NULL

示例:

mysql> SELECT ELT(1, 'ej', 'Heja', 'hej', 'foo');
        -> 'ej'
mysql> SELECT ELT(4, 'ej', 'Heja', 'hej', 'foo');
        -> 'foo'
来源:

mysql> SELECT ELT(1, 'ej', 'Heja', 'hej', 'foo');
        -> 'ej'
mysql> SELECT ELT(4, 'ej', 'Heja', 'hej', 'foo');
        -> 'foo'

我喜欢这个。但这不是唯一的方法:您也可以使用查找表。