0

我希望我的用户搜索我的数据库以从我使用 UNION 完成的两个不同表中返回数据,但我希望它不仅可以从两个表中搜索,而且还可以显示为两个表。我该怎么做呢?

  $result .= "<table border='1'>";
    $result .="<tr><td>Cater</td><td>Part</td><td>Gids</td></tr>";
    while ($row = mysql_fetch_array($sql)){
        $result .= '<tr>';
        $result .= '<td>'.$row['Name'].'</td>';
        $result .= '<td>'.$row['Part'].'</td>';
        $result .= '<td>'.$row['Gid'].'</td>';
        $result .= '</tr>';
    }
    $result .= "</table>"; 
    $result .= "<table border='1'>";
    $result .="<tr><td>Cater</td><td>Dish</td><td>Gids</td></tr>";
    while ($row = mysql_fetch_array($sql)){
        $result .= '<tr>';
        $result .= '<td>'.$row['Name'].'</td>';
        $result .= '<td>'.$row['Dish'].'</td>';
        $result .= '<td>'.$row['Gid'].'</td>';
        $result .= '</tr>';
    }
    $result .= "</table>";
4

2 回答 2

1

如果你打算这样做,你需要一些方法来判断第一个结果在哪里结束,第二个结果在哪里开始。一种简单的方法是在结果集中添加一个额外的列:

Select
    0 as resultset,
    Name,
    Part,
    Gid
From
    Parts
Union All
    1,
    Name,
    Dish,
    Gid
From
    Dishes
Order By
    resultset -- I'm not sure if you need this, or whether you get it for free

然后,如果您已移至第二个结果集,则需要跳出第一个循环。此外,联合中的列名都将反映第一部分,因此我将 Dish 更改为 Part。您还必须处理联合的任何一个或两个部分可能不返回任何内容的可能性。

$result .= "<table border='1'>";
$result .="<tr><td>Cater</td><td>Part</td><td>Gids</td></tr>";
while ($row = mysql_fetch_assoc($sql) && $row['resultset'] === 0) {
    $result .= '<tr>';
    $result .= '<td>'.$row['Name'].'</td>';
    $result .= '<td>'.$row['Part'].'</td>';
    $result .= '<td>'.$row['Gid'].'</td>';
    $result .= '</tr>';
}
$result .= "</table>"; 
$result .= "<table border='1'>";
$result .="<tr><td>Cater</td><td>Dish</td><td>Gids</td></tr>";
while ($row){
    $result .= '<tr>';
    $result .= '<td>'.$row['Name'].'</td>';
    $result .= '<td>'.$row['Part'].'</td>';
    $result .= '<td>'.$row['Gid'].'</td>';
    $result .= '</tr>';
    $row = mysql_fetch_assoc($sql);
}
$result .= "</table>";
于 2013-10-06T19:04:39.030 回答
0

您可能确实有两张桌子,但彼此相邻。尝试在两者之间放置一些可见的东西。我放了一个 HR,但您可以为您的页面提供视觉上有意义的内容。即使是 BR ot 表头文本也可以。

$result .= "<table border='1'>";
$result .="<tr><td>Cater</td><td>Part</td><td>Gids</td></tr>";
while ($row = mysql_fetch_array($sql)){
    $result .= '<tr>';
    $result .= '<td>'.$row['Name'].'</td>';
    $result .= '<td>'.$row['Part'].'</td>';
    $result .= '<td>'.$row['Gid'].'</td>';
    $result .= '</tr>';
}
$result .= "</table>"; 

$result .= "<hr />";         <=========

$result .= "<table border='1'>";
$result .="<tr><td>Cater</td><td>Dish</td><td>Gids</td></tr>";
while ($row = mysql_fetch_array($sql)){
    $result .= '<tr>';
    $result .= '<td>'.$row['Name'].'</td>';
    $result .= '<td>'.$row['Dish'].'</td>';
    $result .= '<td>'.$row['Gid'].'</td>';
    $result .= '</tr>';
}
$result .= "</table>";
于 2013-10-06T18:59:46.117 回答