2009-10-22 55 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將需要時間且該值每行必須更新