选择一些东西在多个表的列中加入

时间:2011-08-29 03:39:32

标签: php mysql sql

我正在尝试将一堆SELECT全部集成到一起。

我有多个表格看起来类似于以下内容:

表: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'   |
+---+---------+

1 个答案:

答案 0 :(得分:0)

看看这个解决方案,它应该为你提供如何做到这一点的基础:

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

简而言之,您可能希望尝试从每个行的列中选择值作为来自2个表和UNION这些数据集的行,然后将它们加入到查找表中。结果应该是你描述的。 (我假设所有I1,I2,I3等列都代表查找表中的ID)