2009-10-22 54 views
1

我从MySQL数据库替代MySQL的结果

+----------------+------------+---------------------+----------+ 
    | account_number | total_paid | doc_date   | doc_type | 
    +----------------+------------+---------------------+----------+ 
    |    18 | 54.0700 | 2009-10-22 02:37:09 | IN  | 
    |   425 | 49.9500 | 2009-10-22 02:31:47 | PO  | 
    +----------------+------------+---------------------+----------+ 

查询是很好,我得到我需要的只是DOC_TYPE不是很可读的数据得到以下数据。为了解决这个问题,我已经做了以下

CREATE TEMPORARY TABLE doc_type (id char(2), string varchar(60)); 
INSERT INTO doc_type VALUES 
('IN', 'Invoice'), 
('PO', 'Online payment'), 
('PF', 'Offline payment'), 
('CA', 'Credit adjustment'), 
('DA', 'Debit adjustment'), 
('OR', 'Order'); 

我再添加一个加入反对该临时表,所以我DOC_TYPE列更易于阅读,看起来像这样

+----------------+------------+---------------------+----------------+ 
| account_number | total_paid | doc_date   | document_type | 
+----------------+------------+---------------------+----------------+ 
|    18 | 54.0700 | 2009-10-22 02:37:09 | Invoice  | 
|   425 | 49.9500 | 2009-10-22 02:31:47 | Online payment | 
+----------------+------------+---------------------+----------------+ 

这是最好的方法去做这个?是否可以替换一个查询中的文本?我开始看看是否有陈述,但似乎并不是我所追求的,或者我可能只是错误地阅读它。

//编辑//

谢谢大家。我想我会继续这样做。

不幸的是,不可能将doc_type更改为整数,因为这是我没有编写账单应用程序的现有数据库。如果我在这里和那里添加表格而不进行任何更改,我最终会破坏功能。

同样感谢拉胡尔的易于理解的病例陈述。稍后可能会派上用场。

+0

好!使用一个'int'只是为了提高速度的建议。使用字符也足以达到目的。 – 2009-10-22 08:55:25

回答

3

您目前的方式是最好的。可以说document_type可以更改为int,以节省空间和内容,但这是无关紧要的。

进行连接将比任何链接if s快得多和可读。

更不用提,可扩展。如果你需要添加一个新的doc_type,它只是一个插入与可能的几个查询。

0

这是要做到这一点:)

如果doc_type可能是一个整数,你也可以使用ELT功能的最佳方式,如

SELECT ELT(doc_type, 'Invoice', 'Document') FROM table; 

,但它仍然是比简单的加入还难受你必须把这个东西放到每个查询中,并且每个应用程序使用数据库,并且改变描述就变成一个地狱。

2

您可以使用SQL CASE语句在单个查询中执行此操作。

Select account_number, total_paid, doc_date, 
     case doctype 
      when 'IN' then 'Invoice' 
      when 'PO' then 'Online Payment' 
     end 
from table 
0

IIRC这是实现您想要做的正确方法。这是一个规范化的设计

我认为你是在问设计而不是如何获取数据?如果是这样,那么我应该告诉我一直使用上述的设计。

此设计导致规范化的数据库。不会有,如果你曾经需要改变字段的名称,如InvoiceOnline Payment一致性问题

我建议你doc_type字段更改为int因为它不仅节省了空间(由Tordek所讲述),但它在执行查询时也更快。

  • 首先,如果您在doct_type中使用Invoice作为字符串,那么问题可能在于字符串搜索与其他数据类型相比非常慢。
  • 其次,它是区分大小写(这可能会导致错误。
  • 第三,由于串占用太多的空间,需要将其存储在主表这么多的空间。
  • 四,如果你曾经需要改名字InvoiceBilling,然后搜索Invoice将需要时间且该值每行必须更新