结合两个单独的MySQL查询的结果

时间:2011-05-05 05:09:25

标签: php mysql

我正在尝试执行两个单独的数据库查询并将结果返回到表单。每个结果都写在一个表格中。

我希望能够将两个查询合并为一个,并按任务编号对结果进行排序。

首先查询:

 //Booking  
    $Date= date("d/m/Y");
    $driver = $_SESSION['username'];
    $dbTaskRecords = "SELECT * FROM booking WHERE driver='$driver' AND Date= CAST('$Date_search' AS DATE) ORDER BY TaskNo ASC"; 
    $dbTaskRecords_result = mysql_query($dbTaskRecords);

第二次查询:

//Return Booking    
    $dbTaskReturn = "SELECT * FROM returnbooking WHERE driver='$driver' AND Date= CAST('$Date_search' AS DATE) ORDER BY TaskNo ASC";    
    $dbTaskReturn_result = mysql_query($dbTaskReturn);

然后通过while语句将结果输出到页面。

$i=0;
        while ($row = mysql_fetch_array($dbTaskRecords_result)){
        //Control Structure for Move Time on first Job of day           
        if ($i==0 ){
        $time = $row["Time"];
        //$time = 'N/A';

        }else{
            $time = 'N/A';
        }

        //Get Rego from trucks table        
        $truckID = $row["TruckID"];
        $Rego_select = mysql_query("SELECT VechicleRegistration FROM trucks WHERE TruckID = '$truckID'" )
        or die("Problem reading table: " . mysql_error());
        $Rego = mysql_result($Rego_select,0);

        //Get unregisted from trucks table
        $Unregisted_select = mysql_query("SELECT Unregistered FROM trucks WHERE TruckID = '$truckID'" )
        or die("Problem reading table: " . mysql_error());
        $Unregisted = mysql_result($Unregisted_select,0); 

        $id_note = $row["BookingID"];           


                echo    '<td><a href="taskpage.php?id='.$id_note.'"><button>'. $row['TaskNo']."</button><a/></td>";
                echo    "<td>". $time . "</td>";                           // Time Frame
                echo    "<td>". $Unregisted."</td>";                      // Pickup 
                echo    "<td>". $Rego."</td>";                           // Unregisted
                echo    "<td>".$row["PickupLocation"] . "</td>";        // Rego
                echo    "<td>".$row["DropOffLocation"] . "</td></tr>"; // Delivery
                $i=$i+1;//Control Set
                }
            echo'</tr>';

我为退货预订的结果重复了相同的输出代码。

是否可以将两个查询合并为一个,以便两个表的结果集可以由ASC排序并由上述while语句输出。

3 个答案:

答案 0 :(得分:8)

这是避免Select *的众多原因之一。你可以简单地使用一个联合

Select Time, TruckId, TaskNo, PickupLocation, DropOffLocation
From booking 
Where driver='$driver' 
    And Date= CAST('$Date_search' AS DATE) 
Union All
Select Time, TruckId, TaskNo, PickupLocation, DropOffLocation
From returnbooking
WHERE driver='$driver' 
    And Date= CAST('$Date_search' AS DATE) 
Order By TaskNo Asc

在此解决方案中,您需要枚举列并确保列的类型按两个Select子句中枚举的顺序相同。

答案 1 :(得分:2)

据我所知,你有三个选择来完成你的目标。

您可以使用连接,假设两个表都有外键。

您可以使用union来附加两个结果集。

您可以将两个查询输出到一个数组中,并为您的输出迭代该数组。这可能不如union更有效,但可以让你在两个结果集之间有更大的分离。

答案 2 :(得分:0)

使用多个较小的表可以保持数据的有序性并确保列名相同。

如果我们有一个拥有大量客户的公司,客户可能是私人客户或公司,使用单独的表格来处理这些地址,2个参考表格中包含client_id和adres_id或者company_id和adres_id,则adres将会始终具有相同的列名。

不仅如此,但如果某些信息有限,则不存在存储空白空间的风险......

最后,您应该坚持使用SQL来一次性获取所需的所有数据,并使用PHP(或其他服务器端脚本)将此数据格式化为用户。对于内部或私人网站来说,这不是什么大问题,但是当您拥有更多用户时,您将需要限制数据传输的数量和大小。

仅使用1个长查询通常比几个较小的查询要好。