2011-08-29 43 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 –

相關問題