两个查询,两个不同的表,只有一个循环


Two queries, two different tables, only one loop

我想为两个不同的表运行两个select语句,但将它们列在一个循环中。目前我独立运行它们,但这并不理想,因为我希望记录作为一个整体按日期顺序列出。列名和列编号不同。

简化的当前设置

     $SQL = "SELECT * FROM table1 WHERE colA IS NOT NULL ORDER BY dateA";
     $DataOne = mysql_query($SQL);
     $SQL = "SELECT * FROM table2 WHERE colZ IS NOT NULL ORDER BY dateZ";
     $DataTwo = mysql_query($SQL);
     while ($row = mysql_fetch_assoc($DataOne)) {
         echo "<td>$row[colA]</td>"; 
     } 
        while ($row = mysql_fetch_assoc($DataTwo)) {
         echo "<td>$row[colZ]</td>"; 
     }

所需设置(逻辑)

while ($row = mysql_fetch_assoc($DataOne, $DataTwo)) {
    // all returned rows from both tables in date order
    echo "<td>$row[EitherCol]</td>";
}

信息:我知道我应该使用mysqlipdo,但目前这不是一个选项

如果列的数量和类型相同,请使用UNION运算符。列名将取自第一个查询,以防它们不同。

不是最后一个,请避免使用"SELECT*",而是枚举列。

在你的情况下,我会这样做:

SELECT colA as EitherCol FROM table1 WHERE colA IS NOT NULL ORDER BY dateA
UNION
SELECT colZ as EitherCol FROM table2 WHERE colZ IS NOT NULL ORDER BY dateZ

使用UNION。。。

$SQL = "(SELECT * FROM table1 WHERE colA IS NOT NULL) UNION (SELECT * FROM table2 WHERE colZ IS NOT NULL) ORDER BY date";
$Data = mysql_query($SQL);
while ($row = mysql_fetch_assoc($Data)) {
// all returned rows from both tables in date order
echo "<td>$row[EitherCol]</td>";
}

只选择相关列并将其命名为相同的

SELECT colA1 as col1 , colA2 as col2 , colA3 as col3 , dateA as date FROM table1
UNION
SELECT colB1 as col1 , colB2 as col2 , '' as col3 , dateB as date FROM table2
ORDER BY date

如果你看看col3,这是一个例子,说明如果你绝对需要表1中的东西,而它在表2中不存在,你可以做什么

最后,使用日期别名可以按日期排序最终表格