2012-12-01 48 views
0

我有三个XREF表。如何将三个XREF表合并为一个?

  1. order_delivery_xref:ORDER_ID(INT),delivery_id(INT)
  2. delivery_invoice_xref:delivery_id(INT),INVOICE_ID(INT)
  3. invoice_order_xref:INVOICE_ID(INT),ORDER_ID(INT)

我现在需要将它们组合成一个公共表格,如下所示:

order_delivery_invoice_xref:order_id(int),delivery_id(int),invoice_id(int)

有没有办法使用查询来做到这一点?或程序?或者使用php脚本+ mysql查询?

注:

  1. delivery_id总是以order_id
  2. invoice_id并不总是存在的存在,并需要在该行中null,如果缺少

以下是我所尝试的:

SELECT order_id, delivery_id 
FROM order_delivery_xref 
WHERE 1 

......等等所有三个表格。

然后我运行php一个foreach()环为所述第一阵列,使用用于其他阵列isset()功能检查(替换NULL其中!isset()),和在HTML创建一个表> TR> TD。

我不太确定这是否是正确的方法。有人可以提出更好的方法吗?

回答

0

这取决于你想要做什么。要做到这一点,这将工作:

create table odx(order_id int,delivery_id int);创建表格dix (delivery_id int,invoice_id int);创建表iox(invoice_id int, order_id int);插入到odx值(1,11),(2,22),(3,33)中;插入到值(22,333),(22,444),(33,555);插入到iox值(333, 1),(444,2),(555,2);

create table odix(order_id int,delivery_id int,invoice_id int);

插入到odix(ORDER_ID,delivery_id,INVOICE_ID)选择 odx.order_id,odx.delivery_id,dix.invoice_id从ODX 留在dix.delivery_id = odx.delivery_id 加入DIX留在iox.order_id =加入IOX ODX。ORDER_ID;

但你必须就如何联接表自己的决定 - 因为三个表的内容,你可以加入他们不同的结果很多方面。

此外,您必须弄清楚在任何辅助表格更改时应如何操作 - 您是从头开始重新创建odix表还是仅添加新的或已更改的记录。

你会发现在MySQL中尽可能多地做这件事将比PHP中快--MySQL非常擅长将表连接在一起并以这种方式聚合数据。

最后,你可能想考虑你为什么要这样做 - 为什么把数据放在另一个表中。使用MySQL,您可以随时组合数据以便以这种方式查看它们,因此复制数据似乎没有意义。它会在您的数据库中创建冗余,从而导致混乱,难以管理。

查看一些关于“正常化”的参考资料以获得一些想法。

+0

也许我应该澄清。一旦完成,我不想保留三张桌子。我只会“放下”它。 – Abhilash

+0

好的,但也许你不需要建立新的表格 - 因为你可以从查询的版本中获得所需的一切 - 取决于你在做什么。但是,如果你想要桌子,我已经告诉你如何建立它 - 这对你有用吗? –