我有三张XREF表。
order_delivery_xref
:order_id(int),delivery_id(int)delivery_invoice_xref
:delivery_id(int),invoice_id(int)invoice_order_xref
:invoice_id(int),order_id(int)我现在需要将它们组合成一个公共表,如下所示:
order_delivery_invoice_xref
:order_id(int),delivery_id(int),invoice_id(int)
有没有办法使用查询执行此操作?还是一个程序?或者使用php脚本+ mysql查询?
注意:
delivery_id
始终存在且order_id
invoice_id
并不总是存在,如果缺少,则需要null
行这是我尝试过的:
SELECT order_id, delivery_id
FROM order_delivery_xref
WHERE 1
......以及所有三个表格等等。
然后我在foreach()
中为第一个数组运行php
循环,使用isset()
函数检查其他数组(替换NULL
其中!isset()
),并在html中创建一个表> tr> td。
我不太确定这是不是正确的方法。有人可以提出更好的方法吗?
答案 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,您始终可以将数据组合在一起以这种方式查看它们,因此复制数据似乎没有意义。它会在您的数据库中创建冗余,这会让您感到困惑和难以管理。
查看一些关于“规范化”的参考资料以获得一些想法。