2011-05-05 123 views
3

我試圖做兩個單獨的數據庫quires並將結果返回給窗體。每個結果都寫入一個表中。結合兩個單獨的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語句輸出。

回答

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 

在這個解決方案,您需要枚舉列,並確保它們在兩個選擇條款列舉列的類型,順序是相同的。

+0

乾杯。我不確定如何將結果輸入變量。我試過$ time = mysql_result($ dbTaskRecords,0);但那不起作用。 – 2011-05-05 10:33:50

+0

@Samuel Meddows - 您應該可以像訪問單個select語句時那樣訪問列。 – Thomas 2011-05-05 15:11:11

+0

如果兩個子查詢都在同一個表上,那麼使用SELECT *沒什麼問題......是嗎? – Rooster242 2014-03-20 20:53:42

2

從我可以告訴你有三個選項來完成你以後的事情。

您可以使用連接,假設兩個表都有外鍵。

您可以使用聯合來附加兩個結果集。

您可以將兩個查詢輸出到一個數組中並遍歷該數組以輸出。這可能不如聯合會效率更高,但會使兩個結果集之間有更大的分離。

0

使用多個小表保持數據的組織性並確保列名相同。

如果我們有一個公司有很多客戶,並且客戶可能是私人客戶或公司,那麼爲這些地址和2個參考表使用client_id和adres_id或者company_id和adres_id,將始終具有相同的列名稱。

不僅如此,但如果某些信息是有限的,你不要運行存儲空閒空間的風險......

到底你真的應該堅持到SQL爲讓你在一個需要的數據去使用PHP(或其他服務器端腳本)將這些數據格式化給用戶。這對於內部或私人網站來說並不是什麼大問題,但是當你有更多的用戶時,你會想要限制數據傳輸的數量和大小。

只使用1個長查詢通常比幾個更小。

+1

不總是使用一個長查詢更好。這取決於場景,你永遠無法確定這個選項是否最好,直到你測試。檢查此[SO安塞爾](http://stackoverflow.com/questions/3910317/is-it-better-to-return-one-big-query-or-a-few-smaller-ones)知道更多 – Yaroslav 2012-10-11 07:03:28