2017-12-07 14 views
0

5 개의 SQL 쿼리가 있습니다. HTML의 테이블에있는 결과를 표시하고 싶습니다. 지금 당장, 나는 그 쿼리의 결과를 읽는 while 루프를 중첩했다. 그러나 결과 테이블은 처음 5 개 열의 첫 번째 행을 반복합니다 (모든 쿼리에 Route가 나타남). 여섯 번째 열은 정확합니다. 내가지고있어 결과 여기SQL 쿼리와 PHP while 루프를 사용하여 html 테이블 만들기

<table style="width:100%"> 
    <tr> 
     <th>Route</th> 
     <th>Total Cost ($)</th> 
     <th>Utilization (%)</th> 
     <th>Number Locations Serviced</th> 
     <th>Total Time (Hrs)</th> 
     <th>Cost per Item Delivered ($)</th> 
    </tr> 

    $query1 = "SELECT RouteID as Route, ROUND(SUM(CostTo), 2) as TotalCost FROM VehicleRoutes, ContractID WHERE ContractID.ContractID >= ALL(SELECT ContractID.ContractID FROM ContractID) AND ContractID.ContractID = VehicleRoutes.ContractID GROUP BY RouteID"; 

    $result1 = mysqli_query($conn, $query1); 

    $query2 = "SELECT Items.RouteID as Route, ROUND((COUNT(*)/ContractID.TruckCapacity)*100, 3) as UtilizationPercentage FROM Items, ContractID WHERE Items.ContractID = ContractID.ContractID AND Items.RouteID != 'NA' AND ContractID.ContractID >= ALL(SELECT ContractID.ContractID FROM ContractID) GROUP BY Items.RouteID"; 

    $result2 = mysqli_query($conn, $query2); 

    $query3 = "SELECT V.RouteID as Route, COUNT(V.LocationIDTo) as NumLocationsServiced FROM VehicleRoutes as V, ContractID WHERE ContractID.ContractID >= ALL(SELECT ContractID.ContractID FROM ContractID) AND V.LocationIDTo != 'Warehouse' AND V.ContractID = ContractID.ContractID GROUP BY V.RouteID"; 

    $result3 = mysqli_query($conn, $query3); 

    $query4 = "SELECT V.RouteID as Route, ROUND(SUM(V.TravelTime + V.DeliveryTime), 3) as TotalTime FROM VehicleRoutes as V, ContractID WHERE ContractID.ContractID >= ALL(SELECT ContractID.ContractID FROM ContractID) AND ContractID.ContractID = V.ContractID GROUP BY V.RouteID"; 

    $result4 = mysqli_query($conn, $query4); 

    $query5 = "SELECT I.RouteID AS Route, ROUND(SUM(V.CostTo)/COUNT(I.ItemID) , 2) AS CostPerItemDelivered FROM Items AS I, VehicleRoutes AS V, ContractID WHERE ContractID.ContractID >= ALL(SELECT ContractID.ContractID FROM ContractID) AND I.RouteID != 'NA' AND I.RouteID = V.RouteID AND I.ContractID = ContractID.ContractID AND V.ContractID = I.ContractID GROUP BY I.RouteID"; 

    $result5 = mysqli_query($conn, $query5); 

    while($col1 = mysqli_fetch_array($result1)){ 
     while($col2 = mysqli_fetch_array($result2)){ 
     while($col3 = mysqli_fetch_array($result3)){ 
      while($col4 = mysqli_fetch_array($result4)){ 
       while($col5 = mysqli_fetch_array($result5)){ 
       echo "<tr><td>".$col1["Route"]."</td><td>".$col1["TotalCost"]."</td><td>".$col2["UtilizationPercentage"]."</td><td>".$col3["NumLocationsServiced"]."</td><td>".$col4["TotalTime"]."</td><td>".$col5["CostPerItemDelivered"]."</td></tr>"; 
        } 
       } 
      } 
     } 
    } 

그리고있다 : 당신이해야 할 I checked the results individually before putting them in the loops, so I know they are correct. I'm just not sure why the first row is repeating itself for everything but "Cost/Item Delivered."

답변

0

데이터입니다 여기

내 테이블 선언, 데이터베이스에 연결 한 후 쿼리 및 동안 루프입니다 매핑을 사용하여 원본 데이터 (SQL에서)를 대상 데이터 (테이블 데이터)로 변환합니다. 나는 동안 루프 부분을 업데이트하고이 데이터를 변환하는 방법의 예 중 하나입니다

$targetData = array(); 

function addData(&$targetData, $routeId, $dataKey, $dataValue) { 
    if (!isset($targetData[$routeId])) $targetData[$routeId] = array(); 
    $targetData[$routeId][$dataKey] = $dataValue; 
} 

while($col1 = mysqli_fetch_array($result1)) { 
    addData($targetData, $col1['Route'], 'TotalCost', $col1['TotalCost']); 
} 

while($col2 = mysqli_fetch_array($result2)) { 
    addData($targetData, $col2['Route'], 'UtilizationPercentage', $col2['UtilizationPercentage']); 
} 

while($col3 = mysqli_fetch_array($result3)) { 
    addData($targetData, $col3['Route'], 'NumLocationsServiced', $col3['NumLocationsServiced']); 
} 

while($col4 = mysqli_fetch_array($result4)) { 
    addData($targetData, $col4['Route'], 'TotalTime', $col4['TotalTime']); 
} 

while($col5 = mysqli_fetch_array($result5)) { 
    addData($targetData, $col5['Route'], 'CostPerItemDelivered', $col5['CostPerItemDelivered']); 
} 

foreach ($targetData as $routeId => $data) { 

    echo '<tr>' . 
      '<td>' . $routeId . '</td>' . 
      '<td>' . (isset($data['TotalCost']) ? $data['TotalCost'] : '&nbsp;') . '</td>' . 
      '<td>' . (isset($data['UtilizationPercentage']) ? $data['UtilizationPercentage'] : '&nbsp;') . '</td>' . 
      '<td>' . (isset($data['NumLocationsServiced']) ? $data['NumLocationsServiced'] : '&nbsp;') . '</td>' . 
      '<td>' . (isset($data['TotalTime']) ? $data['TotalTime'] : '&nbsp;') . '</td>' . 
      '<td>' . (isset($data['CostPerItemDelivered']) ? $data['CostPerItemDelivered'] : '&nbsp;') . '</td>' . 
     '</tr>'; 

} 
+0

가 감사를 !!!!!! – kraus4