我试图将一堆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' |
+---+---------+
如果您可以对表进行旋转(即:将列转为行),这样会更容易。 AFAIK MySQL没有这个功能。 – NullUserException
问题在于A表中ID#1后有数百行。 – abarrington
虽然我很好奇;为什么表格是这样构成的?当这种问题出现时,它可能是坏DB设计的标志。 – NullUserException