2011-12-28 53 views
3

我接管了管理我工作的公司的內部網站,並且我需要從mysql數據庫中獲取數據。我遇到的問題是數據在6個不同的表中,全部使用相同的字段,但行都是唯一的(行在一個表中開始,然後在處理完成後被完全移動到不同的表中)僱員)。查看哪張表的結果是

有沒有簡單的方法來查詢所有6一次?能夠檢索它來自的表的標題也是有用的。

我正在使用PHP來運行查詢並顯示它。創建另一個表來定義所有行的位置,有一個唯一的id,然後是另一個表所在的表?

+0

」創建另一個表來定義所有行的位置,有一個唯一的ID,然後是另一個表所在的位置?是的,這是一種經典的設計模式。 – Interrobang 2011-12-28 21:22:14

+0

在那裏。祝你好運,你需要它。 – 2011-12-28 21:22:28

回答

0

要完成此查詢,使用union all

select 
    'Table1' as TableName, 
    * 
from 
    Table1 
union all 
select 
    'Table2', 
    * 
from 
    Table2 
union all 
select 
    'Table3', 
    * 
from 
    Table3 

...等等

爲了更好的數據庫設計,你想要麼有一個表所有在它的行,以及一個指定的狀態表,在這裏您可以將StatusID列鏈接到指定給定行所處狀態的狀態列表。流程中每個階段的表格設計不佳,並且只會導致嚴重的頭痛。

0

如果你不能重新組織表格,以便你只有一個包含所有行和標記的過程中的標記,我會去做一個UNION -approach。即:

SELECT 'Data from Table 1', t1.field1, ... 
    FROM Table1 t1 
UNION 
SELECT 'Data from Table 2', t2.field1, ... 
    FROM Table2 t2 
UNION 
(Table3, 4, 5 and 6 in the same manner) 
.... 

這樣你就可以看到數據源自哪裏,並且一次獲得全部6個數據。請記住,您必須在UNION的所有部分都有完全相同的字段列表。

0

您可以創建一個代碼生成器來生成SQL語句來查詢6個表。生成器將創建6個選擇的UNION,併爲每個選擇添加一個「表」列,其中的常量值等於查詢的表的名稱。這會使得編寫語句變得容易,但我不會說編寫生成器會是。 「