Php 从多个表中进行选择的最佳方法

Php 从多个表中进行选择的最佳方法,php,mysql,join,Php,Mysql,Join,我有很多表,像A1、B1、C1……等等。都具有相同的行结构 Moz - Attr1 - attr2 以及一个包含所有表名称的表,如: Id(pk) - tname - input 1 A1 X 2 B1 Y 3 C1 Z 我正在寻找在一个视图中获得所有A1、B1、C1值的最佳方法。 如果可能,不使用UNION如果所有表都具有相同的结构,那么所有数据实际上都属于一个表。为了给它起个名字,我们把它叫做XY 表格

我有很多表,像A1、B1、C1……等等。都具有相同的行结构

Moz -  Attr1 - attr2
以及一个包含所有表名称的表,如:

Id(pk) - tname - input
1          A1      X
2          B1      Y
3          C1      Z
我正在寻找在一个视图中获得所有A1、B1、C1值的最佳方法。
如果可能,不使用UNION

如果所有表都具有相同的结构,那么所有数据实际上都属于一个表。为了给它起个名字,我们把它叫做XY

表格名称“A1,B1”。。。etc应该只是XY表中的另一个字段:

Moz -  Attr1 - attr2 - context
-      -       -       A1
-      -       -       B1
此表确实需要正确索引。
假设
Moz
字段是每个表的主键,则需要将(Moz,Context)作为主键,以避免出现重复
Moz
值的问题

然后,获得所有表的并集就像从XY中选择一样简单和快速

如果需要选择一些表格:
select*from XY WHERE context IN('A1','B1')

一般来说,在SQLRDBMS中使用动态创建的表是一个非常糟糕的主意,因为它完全违背了“关系”的目的,并且会导致性能下降

实际上,您刚刚发现了困难的方法,因为从技术上讲,A1、B1、C1表是不相关的,但是您希望它们通过使用union变得相关,而您不希望使用union,因为它“很慢”。
通过将名称存储为字段,可以在“表列表”表和XY之间创建一个关系,现在可以使用相当快的联接,不再需要进一步的“创建表”


请参阅,以更好地解释这些概念。

有没有避免使用UNION的具体原因?依我看,UNION的速度通常很慢。最好的方法是将它们都放在一个正确索引的表中。下一个最好的选择是将它们合并为一个联合体。你的观点并没有真正融入其中。因此,如果我理解得很好,你希望从带有Id/tname/input字段的表中选择表名,并从
tname
?@Axxess中列出的表中动态获取联合。如果你有正确的主键,允许一对多数据库关系,那么你可以使用内部联接-