2011-08-29 82 views
2

我试图将一堆SELECTs集成到一个中。选择一些东西在多个表的列中加入

我有一个类似于下面的多个表:

表:A1

+---+----+----+----+----+ 
|id | I1 | I2 | I3 | I4 | 
+---+----+----+----+----+ 
| 1 | 5 | 6 | 1 | 3 | 
+---+----+----+----+----+ 

表:A2

+---+----+----+----+ 
|id | I1 | I2 | I3 | 
+---+----+----+----+ 
| 1 | 3 | 10 | 5 | 
+---+----+----+----+ 

和1个表,看起来像这样:

表:标准

+---+---------+ 
|id | Name | 
+---+---------+ 
| 1 | 'one' | 
| 2 | 'two' | 
| 3 | 'three' | 
| 4 | 'four' | 
| 5 | 'five' | 
| 6 | 'six' | 
| 7 | 'seven' | 
| 8 | 'eight' | 
| 9 | 'nine' | 
|10 | 'ten' | 
+---+---------+ 

PHP代码

<?php 
    while(/*"A" tables*/){ 
     $noi = // number of columns in this A table 
     $id = // id of this A table 
     $columns = ""; 
     for ($i=1; $i<=$noi; $i++){ 
      $columns = $columns . "A" . $id . ".I" . $i . ", "; 
     } 
     $columns = rtrim($columns, ", "); 

     $sql = "SELECT s.* FROM A" . $id . " 
      INNER JOIN Standards AS s 
      ON s.id IN (" . $columns . ") 
      WHERE A" . $id . ".id=1 
      ORDER BY s.id ASC"; 

     $result = mysql_query($sql); 
    } 
?> 

我想所有这些SELECTS合并成1。我想我可以运行一个for循环生成所有表的名字,但我不确定如何加入他们在那里的其他JOIN ON ... IN(...)。

我想产生的结果是:

+---+---------+ 
|id | Name | 
+---+---------+ 
| 1 | 'one' | 
| 3 | 'three' | 
| 5 | 'five' | 
| 6 | 'six' | 
|10 | 'ten' | 
+---+---------+ 
+0

如果您可以对表进行旋转(即:将列转为行),这样会更容易。 AFAIK MySQL没有这个功能。 – NullUserException

+0

问题在于A表中ID#1后有数百行。 – abarrington

+0

虽然我很好奇;为什么表格是这样构成的?当这种问题出现时,它可能是坏DB设计的标志。 – NullUserException

回答

0

在这个解决方案来看看,它应该给你如何做到这一点奠定了基础:

select-mysql-rows-but-rows-into-columns-and-column-into-rows

总之,您可能想尝试从每个行的列中选择值作为2个表中的行,并将这些数据集合并,然后将它们连接到查找表上。结果应该是你所描述的。 (我假设所有的I1,I2,I3等列都代表查找表中的ID)

+0

我想联盟会为我工作。没有我自己尝试一下,有谁知道你是否可以在UNION上进行ORDER BY? – abarrington

+0

当然,就像这样:'选择场 FROM(选择场FROM表1 UNION 选择场从表2可以 ) ORDER BY field1' –

+0

可以参考这篇文章的详细信息:http://stackoverflow.com/questions/ 213851/sql-query-using-order-by-in-union –