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

时间:2012-12-01 06:47:00

标签: php mysql

我有三张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)
  4. 我现在需要将它们组合成一个公共表,如下所示:

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

    有没有办法使用查询执行此操作?还是一个程序?或者使用php脚本+ mysql查询?

    注意:

    1. delivery_id始终存在且order_id
    2. invoice_id并不总是存在,如果缺少,则需要null

    3. 这是我尝试过的:

      SELECT order_id, delivery_id
      FROM order_delivery_xref
      WHERE 1
      

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

      然后我在foreach()中为第一个数组运行php循环,使用isset()函数检查其他数组(替换NULL其中!isset()),并在html中创建一个表> tr> td。

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

1 个答案:

答案 0 :(得分: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);插入dix   值(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的odx.order_id,odx.delivery_id,dix.invoice_id       在dix.delivery_id = odx.delivery_id上左连接dix       在iox.order_id = odx.order_id;

上加入iox

但是你必须自己决定如何加入表 - 由于这三个表的内容,你可以用不同的方式加入它们,结果不同。

此外,您必须弄清楚当任何子表更改时要执行的操作 - 您是从头开始重新创建odix表还是只添加新的或更改的记录。

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

最后,您可能想要考虑为什么要这样做 - 为什么要将数据放在另一个表中。使用MySQL,您始终可以将数据组合在一起以这种方式查看它们,因此复制数据似乎没有意义。它会在您的数据库中创建冗余,这会让您感到困惑和难以管理。

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