我在另一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
我的想法是将每一行放在单独的表中,但我不知道如何实现。
感谢您的帮助。
答案 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>";
}