如何调整此PHP表布局?

时间:2018-10-11 02:12:28

标签: php

我在另一page1上使用此代码,该代码适用于该页面,但是page1的SQL Select一次从一个SQL表返回一行。这可行,但是我想调整布局,但是我不知道如何得到所需的东西。

$isql = "Select AO.OrderNumber, AO.Name, AO.Address, AO.OrderDate, AOP.PartNumber, AOP.PartDescription
From tblAceOrders AO
Left outer join tblAceOrdersParts AOP on AOP.OrderNumber=AO.OrderNumber
Where AO.OrderDate between '01/01/2018' and '01/15/2018'"
;

 $stmt = sqlsrv_query( $conn, $isql);

if( $stmt === false ) {
     {
    if( ($errors = sqlsrv_errors() ) != null) {
        foreach( $errors as $error ) {
            echo "SQLSTATE: ".$error[ 'SQLSTATE']."<br />";
            echo "code: ".$error[ 'code']."<br />";
            echo "message: ".$error[ 'message']."<br />";
        }
    }}}


/**
 * Put resules in a table
 */
$stmt = sqlsrv_query($conn, $isql, array(), array("Scrollable" => 'static'));
if( $stmt === false ) {
    echo "Error (sqlsrv_query): ".print_r(sqlsrv_errors(), true);
    exit;
}
$row_count = sqlsrv_num_rows($stmt);  
if ($row_count === false) { 
    echo "Error (sqlsrv_num_rows)";
    exit;
}

// Set the number of rows to be returned on a page. 
$rowsPerPage = 10;

// Get the total number of rows returned by the query.  
$rowsReturned = sqlsrv_num_rows($stmt); 
if($rowsReturned === false) 
    die( print_r( sqlsrv_errors(), true)); 
elseif($rowsReturned == 0) 
{ 
    echo "No rows returned."; 
//    exit(); 
} 
else 
{     
    /* Calculate number of pages. */ 
    $numOfPages = ceil($rowsReturned/$rowsPerPage); 
}

    echo "<table id='table_id'' border='5' column width='100%'><tr><th><center>Order Number</center></th><th><center>Name</center></th><th><center>Address</center></th>
    <th><center>Order Date</center></th><th><center>Part Number</center></th><th><center>Part Description</center></th></th></></tr>";


while( $row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC) ) 

{
    echo "<tr>";
    echo "<td><center>" . $row['OrderNumber']."</center></td>";
    echo "<td><center>" . $row['Name']."</center></td>";
    echo "<td><center>" . $row['Address']."</center></td>";
    echo "<td><center>" . $row['OrderDate']."</center></td>";
    echo "<td><center>" . $row['PartNumber']."</center></td>";
    echo "<td><center>" . $row['PartDescription']."</center></td>";
    }
    echo "</table>"; 

产生:

OrderNumber     Name            Address                     OrderDate       Partnumber      PartDescription
2018-001        Mike Smith      435 W 8th St, Trussville    01/02/2018      C-524           Left Panel
2018-001        Mike Smith      435 W 8th St, Trussville    01/02/2018      MD-5632         Rear Patch
2018-001        Mike  Smith     435 W 8th St, Trussville    01/02/2018      J-7C5           Left Panel Bottom
2018-002        Chris Dixon     8 N Elm St, Trussville      01/07/2018      HH-5225         Outside Door
2018-003        Brian Sinclar   772 Derwood Ave, Birmingham 01/07/2018      T4-213          Bottom Lug/Outside
2018-003        Brian Sinclar   772 Derwood Ave, Birmingham 01/07/2018      D-5398          Bottom Bolt/Inside

但我希望它输出与此类似的内容:

OrderNumber     Name            Address                     OrderDate       Partnumber      PartDescription
2018-001        Mike Smith      435 W 8th St, Trussville    01/02/2018      C-524           Left Panel
                                                                            MD-5632         Rear Patch
                                                                            J-7C5           Left Panel Bottom

2018-002        Chris Dixon     8 N Elm St, Trussville      01/07/2018      HH-5225         Outside Door

2018-003        Brian Sinclar   772 Derwood Ave, Birmingham 01/07/2018      T4-213          Bottom Lug/Outside
                                                                            D-5398          Bottom Bolt/Inside

或(最好)

OrderNumber     Name            Address                     OrderDate       
2018-001        Mike Smith      435 W 8th St, Trussville    01/02/2018  
Partnumber      PartDescription                                             
C-524           Left Panel
MD-5632         Rear Patch
J-7C5           Left Panel Bottom                                                           

OrderNumber     Name            Address                     OrderDate
2018-002        Chris Dixon     8 N Elm St, Trussville      01/07/2018
Partnumber      PartDescription 
HH-5225         Outside Door

OrderNumber     Name            Address                     OrderDate
2018-003        Brian Sinclar   772 Derwood Ave, Birmingham 01/07/2018      
Partnumber      PartDescription
T4-213          Bottom Lug/Outside
D-5398          Bottom Bolt/Inside

我的想法是将每一行放在单独的表中,但我不知道如何实现。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

将订单号放入变量中。处理每一行时,请检查当前订单号是否与变量相同。如果是这样,请将行的前4个字段留空。

$prev_order = null;
while( $row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC) ) 
{
    echo "<tr>";
    if ($row['OrderNumber'] == $prev_order) {
        echo "<td colspan='4'></td>"; // Leave first 4 columns blank since they're the same
    } else {
        echo "<td><center>" . $row['OrderNumber']."</center></td>";
        echo "<td><center>" . $row['Name']."</center></td>";
        echo "<td><center>" . $row['Address']."</center></td>";
        echo "<td><center>" . $row['OrderDate']."</center></td>";
        $prev_order = $row['OrderNumber'];
    }
    echo "<td><center>" . $row['PartNumber']."</center></td>";
    echo "<td><center>" . $row['PartDescription']."</center></td>";
    echo "</tr>";
}

查询末尾还应该有ORDER BY AO.OrderNumber,否则不一定会将相同顺序的所有行放在一起。

要获取第二种格式,您需要将列标题移入循环,并在订单号更改时显示列标题,然后显示订单的第一行。

$prev_order = null;
while( $row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC) ) 
{
    echo "<tr>";
    if ($row['OrderNumber'] != $prev_order) {
        echo "<th><center>Order Number</center></th><th><center>Name</center></th><th><center>Address</center></th>
<th><center>Order Date</center></th>";
        echo "<td><center>" . $row['OrderNumber']."</center></td>";
        echo "<td><center>" . $row['Name']."</center></td>";
        echo "<td><center>" . $row['Address']."</center></td>";
        echo "<td><center>" . $row['OrderDate']."</center></td>";
        echo "</tr>";
        echo "<tr><th><center>Part Number</center></th><th><center>Part Description</center></th></th></></tr>";
        $prev_order = $row['OrderNumber'];
    }
    echo "<td><center>" . $row['PartNumber']."</center></td>";
    echo "<td><center>" . $row['PartDescription']."</center></td>";
    echo "</tr>";
}