2011-12-28 105 views
0

我不完全确定如何标题这个问题,很难描述我在标题中的含义。基本上我所拥有的是枚举状态码,我正在寻找一种简单的方法将这些映射到查询中的数据。在SQL /映射状态代码中翻译枚举数据

例如,假设我在某处定义了以下内容。他们是我的控制,是不是在数据库:

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

当你说做一个表是不可能做你的意思做任何对象,即功能,用户定义的变量(在这种情况下是数组)? – Ben 2011-12-28 14:08:49

+0

不,我的意思是将状态定义移动到表中是不可能的。 – Rob 2011-12-28 14:21:30

+0

也许临时表会工作,不确定性能权衡,但这主要是后端的东西,所以表现并不是真正的问题... – Rob 2011-12-28 14:23:19

回答

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 
... 

(等)