如何在 MYSQL 中将查询结果更改为另一个值?



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

id_event|form_type
--------|----------
001     |1
001     |3
001     |4
002     |2
002     |1

当我查询时

some_table中选择form_type,其中id_event= 001

我当然会得到 1,3 和 4。但是,是否可以将这些值更改为数据库层上的其他值?例如,我会得到字符串而不是像这样 int,1 = 'Name',3 = '电子邮件',4 = '城市'等。如果可能,查询是什么?还是唯一的方法是在应用程序端?

是的,你可以这样做:

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可以定义要为表中的值返回的内容。CASE这里的例子。

希望对您有所帮助!

SELECT ELT(form_type, 'Name', 'Unknown', 'Email', 'City')
FROM some_table
WHERE id_event = 001

ELT(( 函数

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

正常的方法是在数据库中有一个包含此信息的参考表。 然后你会使用JOIN

create table forms (
form_type int primary key,
name varchar(255)
);
insert into forms (form_type, name)
values (1, 'Name'),
(2, ???),  -- unclear what goes here
(3, 'Email'), 
(4,  'City');

然后使用JOIN获取名称:

select t.*, f.name
from t join
forms f
using (form_type);

为什么要将此信息存储在数据库中? 简单:一致性!

如果开始在查询中使用CASE表达式,则会使问题激增。 这是有风险的:

不同的
  • 大小写表达式可能使用不同的字符串(例如,"电子邮件"与"电子邮件"(。
  • 如果添加新表单,则必须更改大量代码。
  • 如果你决定改变某物的名称,那么你必须改变很多代码。

您希望数据存储在表中。您不希望在代码中将其实现为业务规则,因为这很脆弱且容易出错。

我应该指出,MySQL确实提供了显式引用表的两种替代方案。 如果仅在一个表中使用form_type,则enum是一种方便的替代方法。 或者,可以使用表中生成的列来生成字符串。

相关内容

  • 没有找到相关文章

最新更新