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,您总是可以将数据组装在一起以这种方式查看它们,因此复制数据似乎没有意义。它在您的数据库中创建冗余,这可能会让您感到困惑和难以管理
查看一些关于“规范化”的参考资料,了解一些想法。也许我应该澄清一下。一旦这件事完成,我不想保留这三张桌子。我将
删除它。好的,但是也许您不需要构建新表-因为您可以从查询的一个版本中获得所需的一切-这取决于您对它所做的操作。但是,如果你想要这个表,我已经向你展示了如何构建它——这对你有用吗?