我不完全确定如何标题这个问题,很难描述我在标题中的含义。基本上我所拥有的是枚举状态代码,我正在寻找一种简单的方法将这些代码映射到查询中的数据。
例如,假设我在某处定义了以下内容。它们不受我的控制,不在数据库中:
CODE STATUS
----------------
1 = ACTIVE
2 = SUSPENDED
3 = CLOSED
4 = CANCELED
5 = ETC...
SELECT item_title, status_code FROM mytable WHERE foo='bar';
整数代码存储在数据库中,但是通常情况下,如果我能让mysql知道它们翻译的内容会有所帮助,特别是对于排序,但是有很多次它会有所帮助。我知道可以做这样的事情:
SELECT item_title,
IF(status_code=1,'ACTIVE',
IF(status_code=2,'SUSPENDED',
IF(status_code=3,'CLOSED',
IF(status_code=3,'CANCELED', ...)
)
)
) AS real_status
FROM mytable WHERE foo='bar';
但这很乏味,很丑陋且容易出错,在某些情况下我可能有50个或更多代码,所以这通常不是解决方案。理想情况下,我会在表中使用代码定义,因此我可以简单地加入它,但这不是一个选项。
我希望有一些我不知道的MySQL功能或技术可以解决这个问题。
编辑: 为了澄清,状态代码未在数据库中定义,它们在代码中定义。我可以在查询后翻译代码中的状态,但这并不理想。基本上,我在询问是否有办法在sql中执行此操作:
SELECT $statushash[tbl.status_code] AS real_status FROM mytable AS tbl...
答案 0 :(得分:2)
假设您无法创建查找表,我可以想到两种可能性:
1.创建user-defined function。但是,在MySQL中创建UDF的restrictions非常严格。
2.创建一个模拟查找表的view - 如下所示:
CREATE VIEW v_enum_lookup AS
select 1 as status_code, 'ACTIVE' as status_description UNION ALL
select 2 as status_code, 'SUSPENDED' as status_description UNION ALL
...
(等)