如何在MYSQL中将查询结果转换成另一个值?

如何在MYSQL中将查询结果转换成另一个值?,mysql,sql,database,codeigniter,Mysql,Sql,Database,Codeigniter,例如,我有一个名为“form_type”的列,由int 1-4组成 id_event|form_type --------|---------- 001 |1 001 |3 001 |4 002 |2 002 |1 当我询问 从id\u event=001的某个\u表中选择表单\u类型 我当然会得到1,3和4。但是,有可能将这些值更改为数据库层上的其他值吗?例如,我会得到字符串而不是int,比如1='Name',3='Email',4='City'等等。

例如,我有一个名为“form_type”的列,由int 1-4组成

id_event|form_type
--------|----------
001     |1
001     |3
001     |4
002     |2
002     |1
当我询问

从id\u event=001的某个\u表中选择表单\u类型


我当然会得到1,3和4。但是,有可能将这些值更改为数据库层上的其他值吗?例如,我会得到字符串而不是int,比如1='Name',3='Email',4='City'等等。如果可能的话,查询是什么?或者唯一的方法是在应用程序端

是的,您可以这样做:

SELECT
    CASE
        WHEN form_type = 1 THEN 'Name'
        WHEN form_type = 3 THEN 'Email'
        WHEN form_type = 4 THEN 'City'
        ELSE 'some default value'
    END
FROM some_table
WHERE id_event = 001
使用CASE定义要为表中的值返回的内容。 案例


希望有帮助

是的,您可以这样做:

SELECT
    CASE
        WHEN form_type = 1 THEN 'Name'
        WHEN form_type = 3 THEN 'Email'
        WHEN form_type = 4 THEN 'City'
        ELSE 'some default value'
    END
FROM some_table
WHERE id_event = 001
SELECT ELT(form_type, 'Name', 'Unknown', 'Email', 'City')
FROM some_table
WHERE id_event = 001
使用CASE定义要为表中的值返回的内容。 案例

希望有帮助

SELECT ELT(form_type, 'Name', 'Unknown', 'Email', 'City')
FROM some_table
WHERE id_event = 001
但我建议创建一个存储数字和字符串之间关系的表,并将其连接到的查询中,以获取字符串而不是int


但是我建议创建一个表来存储数字和字符串之间的关系,并将其连接到查询中,以获取字符串而不是int。

通常的方法是在数据库中有一个包含此信息的引用表。然后使用JOIN:

然后使用JOIN获取名称:

select t.*, f.name
from t join
     forms f
     using (form_type);
为什么要将此信息存储在数据库中?简单:一致性

如果您开始在查询中使用CASE表达式,那么问题就会越来越多。这是有风险的:

不同的大小写表达式可能使用不同的字符串,例如电子邮件和电子邮件。 如果添加新表单,则必须更改大量代码。 如果您决定更改某事物的名称,那么您必须更改大量代码。 您希望数据存储在表中。您不希望在代码中将其实现为业务规则,因为这很脆弱且容易出错


我应该注意到,MySQL确实提供了两种替代显式引用表的方法。如果form_类型仅在一个表中使用,则枚举是一种方便的替代方法。或者,您可以使用表中生成的列来生成字符串。

通常的方法是在数据库中有一个包含此信息的引用表。然后使用JOIN:

然后使用JOIN获取名称:

select t.*, f.name
from t join
     forms f
     using (form_type);
为什么要将此信息存储在数据库中?简单:一致性

如果您开始在查询中使用CASE表达式,那么问题就会越来越多。这是有风险的:

不同的大小写表达式可能使用不同的字符串,例如电子邮件和电子邮件。 如果添加新表单,则必须更改大量代码。 如果您决定更改某事物的名称,那么您必须更改大量代码。 您希望数据存储在表中。您不希望在代码中将其实现为业务规则,因为这很脆弱且容易出错

我应该注意到,MySQL确实提供了两种替代显式引用表的方法。如果form_类型仅在一个表中使用,则枚举是一种方便的替代方法。或者,您可以使用表中生成的列来生成字符串