2011-12-28 70 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,并为每个选择添加一个“表”列,其中的常量值等于查询的表的名称。这会使得编写语句变得容易,但我不会说编写生成器会是。 “