Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何将三个外部参照表合并为一个?_Php_Mysql - Fatal编程技术网

Php 如何将三个外部参照表合并为一个?

Php 如何将三个外部参照表合并为一个?,php,mysql,Php,Mysql,我有三个外部参照表 order\u delivery\u xref:order\u id(int)、delivery\u id(int) 交货发票外部参照:交货id(内部)、发票id(内部) invoice\u order\u xref:发票标识(int)、订单标识(int) 我现在需要将它们合并到一个公共表中,如下所示: 订单交货发票外部参照:订单id(int)、交货id(int)、发票id(int) 有没有一种方法可以使用查询来实现这一点?还是程序?还是使用php脚本+mysql查询 注:

我有三个外部参照表

  • order\u delivery\u xref
    :order\u id(int)、delivery\u id(int)
  • 交货发票外部参照
    :交货id(内部)、发票id(内部)
  • invoice\u order\u xref
    :发票标识(int)、订单标识(int)
  • 我现在需要将它们合并到一个公共表中,如下所示:

    订单交货发票外部参照
    :订单id(int)、交货id(int)、发票id(int)

    有没有一种方法可以使用查询来实现这一点?还是程序?还是使用php脚本+mysql查询

    注:

  • delivery\u id
    始终与
    order\u id
  • invoice\u id
    并不总是存在,如果缺少,则行中需要
    null

  • 以下是我尝试过的:

    SELECT order_id, delivery_id
    FROM order_delivery_xref
    WHERE 1
    
    。。。这三张桌子都是如此

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


    我不太确定这是不是正确的方法。有人能推荐一个更好的方法吗?

    这取决于你想做什么。要完成一次,这将起作用:

    创建表odx(订单id int,交货id int);创建表dix (交货编号、发票编号);创建表iox(发票id int, 订单(id int);

    插入odx值(1,11)、(2,22)、(3,33);插入dix 数值(22333),(22444),(33555);插入iox值(333, 1), (444, 2), (555, 2);

    创建表odix(订单id int、交货id int、发票id int)

    插入odix(订单id、交货id、发票id)选择 来自odx的odx.order\u id、odx.delivery\u id、dix.invoice\u id 在dix.delivery\u id=odx.delivery\u id上左连接dix 在iox.order\u id=odx.order\u id上左连接iox

    但是,您必须自行决定如何联接这些表-由于这三个表的内容不同,您可以通过多种方式联接它们并获得不同的结果

    此外,您还必须弄清楚当任何子表发生更改时该怎么做—您是从头开始重新创建odix表,还是只添加新的或更改的记录

    您会发现,在MySQL中尽可能多地执行这些操作将比在PHP中更快—MySQL非常擅长以这种方式将表连接在一起并聚合数据

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


    查看一些关于“规范化”的参考资料,了解一些想法。

    也许我应该澄清一下。一旦这件事完成,我不想保留这三张桌子。我将
    删除它。好的,但是也许您不需要构建新表-因为您可以从查询的一个版本中获得所需的一切-这取决于您对它所做的操作。但是,如果你想要这个表,我已经向你展示了如何构建它——这对你有用吗?