【问题标题】:Php pdo pagination with FULL JOIN continuous result具有FULL JOIN连续结果的Php pdo分页
【发布时间】:2016-07-07 22:52:50
【问题描述】:

我不知道这段代码有什么问题,但如果我使用 FULL JOIN,则 JOINed 表上的分页会连续。我的意思是,如果 JOINed 表的行数多于第一个表,则结果是空的 html 表,但页面很多。 如果我删除 JOINed 表,则结果是 5-6 行的普通表。但是当 JOIN 和表格变成 5-6 行的信息和 100 的空单元格时。 对此代码有什么建议吗?或者我必须使用其他代码?我不敢相信分页是如此痛苦,找不到好的工作代码。 先感谢您! 故障码如下:

{
/* Set the number of results to display on each page. */
$rowsPerPage = 20;

try
{
    //$query = 'SELECT COUNT(*) FROM paerp.dbo.Truck';
    // simple query
    //$stmtcount = $pdo->query( $query );
    //$rowcountall = $stmtcount;
/* Order target data by ID and select only items (by row number) to display        on a given page. 
   The query asks for one "extra" row as an indicator that another page of    data exists. */
$tsql = "SELECT * FROM 
            (SELECT  ROW_NUMBER() OVER(ORDER BY d.id desc) 
            AS RowNumber, d.id as iddr, d.SqlInsertDate, d.PACourceNumber,    d.ClientQuerydate, d.ClientName, d.SpeditorName, d.CourseType, d.Driver1, d.Driver2, d.TruckRegisteredNumber,          d.TrailerRegisteredNumber, d.StartWorkingDay, d.LoadingAddress, d.UnloadingAddress, d.AgreedLoadingDay, d.ArrivalLoadingDay, d.DateTimeLoading, d.AgreedUnloadingDay, d.ArrivalUnloadingDay, d.DateTimeUnloading, d.PossitionAt8, d.PossitionAt15, d.NextLoading, d.PossitionNumber, d.ExportImport, d.LoadingCustoms, d.UnloadingCustoms, d.InvoiceNumber, d.StatusCource, d.StatusTruck, d.Notes, e.id, e.Names 
FROM dbo.ClientQueries d
FULL JOIN dbo.Employee e ON d.Driver1 = e.id )
        AS TEST 
        WHERE RowNumber BETWEEN ? AND ? + 1";

$sth = $pdo->prepare($tsql, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL));

/* Determine which row numbers to display. */
if(isset($_GET['lowRowNum']) && isset($_GET['highRowNum']))
{
    $lowRowNum = $_GET['lowRowNum'];
    $highRowNum = $_GET['highRowNum'];
}
else
{
    $lowRowNum = 1;
    $highRowNum = $rowsPerPage;
}

/* Execute the query with parameter values. */
$sth->execute(array($lowRowNum, $highRowNum));

$numRows = $sth->rowCount(); 

if($numRows <= 0) 
{ 
    echo "No data returned.</br>"; 
} 
else 
{ 

 echo '<h3>Преглед записи </h3>';
    print("<table class='mytable'>
           <tr class='headertb'>

        <td class='bold'>SqlInsertDate</td>
           <td class='bold'>PACourceNumber</td>
           <td class='bold'>ClientQuerydate</td>
           <td class='bold'>ClientName</td>
           <td class='bold'>SpeditorName</td>
           <td class='bold'>CourseType</td>
           <td class='bold'>Driver</td>
           <td class='bold'>Driver2</td>
           <td class='bold'>TruckRegisteredNumber</td>
           <td class='bold'>TrailerRegisteredNumber</td>
           <td class='bold'>StartWorkingDay</td>
           <td class='bold'>LoadingAddress</td>
           <td class='bold'>UnloadingAddress</td>
           <td class='bold'>AgreedLoadingDay</td>
           <td class='bold'>DateTimeLoading</td>
           <td class='bold'>DateTimeUnloading</td>
           <td class='bold'>PossitionAt8</td>
           <td class='bold'>PossitionAt15</td>
           <td class='bold'>PossitionNumber</td>
           <td class='bold'>StatusCource</td>
           <td class='bold'>StatusTruck</td>
           <td class='bold'>Notes</td>             
            <td class='bold'>Редакция</td>
            </tr>");

    /*Display all but the last of the rows in the result set.*/ 
    for($i=0; $i<$numRows-1; $i++) 
    { 
        $row = $sth->fetch(PDO::FETCH_NUM); 
        print("<tr>
            <td>$row[1]</td>
            <td>$row[2]</td>
            <td>$row[3]</td>
            <td>$row[4]</td>
            <td>$row[5]</td>
            <td>$row[6]</td>
            <td>$row[7]</td>
            <td>$row[8]</td>
            <td>$row[9]</td>
            <td>$row[10]</td>
            <td>$row[11]</td>
            <td>$row[12]</td>
            <td>$row[13]</td>
            <td>$row[14]</td>
            <td>$row[15]</td>
            <td>$row[16]</td>
            <td>$row[17]</td>
            <td>$row[18]</td>
            <td>$row[19]</td>
            <td>$row[20]</td>
            <td>$row[21]</td>
            <td>$row[22]</td>
            <td>$row[23]</td>
            <td>$row[24]</td>
            <td>$row[25]</td>
            <td><a href=update.php?id=$row[1]>Редакция</a></td></tr>"); 
    } 
    /*Display the last row in the result set if 
      there isn't another page of results.*/ 
    if($numRows <=20) 
    { 
        $row = $sth->fetch(PDO::FETCH_NUM); 
        print("<tr>
            <td>$row[1]</td>
            <td>$row[2]</td>
            <td>$row[3]</td>
            <td>$row[4]</td>
            <td>$row[5]</td>
            <td>$row[6]</td>
            <td>$row[7]</td>
            <td>$row[8]</td>
            <td>$row[9]</td>
            <td>$row[10]</td>
            <td>$row[11]</td>
            <td>$row[12]</td>
            <td>$row[13]</td>
            <td>$row[14]</td>
            <td>$row[15]</td>
            <td>$row[16]</td>
            <td>$row[17]</td>
            <td>$row[18]</td>
            <td>$row[19]</td>
            <td>$row[20]</td>
            <td>$row[21]</td>
            <td>$row[22]</td>
            <td>$row[23]</td>
            <td>$row[24]</td>
            <td>$row[25]</td>
            <td><a href=update.php?id=$row[1]>Редакция</a></td>
            </tr>"); 
    } 

    print("</table></br></br>"); 
    /* If there are previous results, 
        display the Previous Page link. */ 
    if($lowRowNum > 1) 
    { 
        $prev_page_high = $lowRowNum - 1; 
        $prev_page_low = $prev_page_high - $rowsPerPage + 1; 
        $prevPage = "?lowRowNum=$prev_page_low&".
                     "highRowNum=$prev_page_high"; 
        print("<a href=$prevPage><< Предишна страница</a>".
               "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"); 
    } 
    /* If there are more results, display the Next Page link.   
       We know there are more results if the query returned 11 rows. */ 
    if($numRows >= 21) 
    {        
        $next_page_low = $highRowNum + 1; 
        $next_page_high = $next_page_low + $rowsPerPage - 1; 
        $nextPage = "?lowRowNum=$next_page_low&".
                     "highRowNum=$next_page_high"; 
        print("<a href=$nextPage>Следваща страница >></a>"); 
    } 
}
 }
catch(Exception $e)
 { 
die( print_r( $e->getMessage() ) ); 
 }
}

【问题讨论】:

    标签: php pdo pagination


    【解决方案1】:

    朋友给我答案。 所以答案在 JOIN 子句中,应该是INNER JOIN 而不是FULL JOIN。而不是这个$row = $sth-&gt;fetch(PDO::FETCH_NUM); 必须更改为这个$row = $sth-&gt;fetch(PDO::FETCH_LAZY); 并且必须在我需要的地方使用命名参数。

    【讨论】:

      猜你喜欢
      • 2010-11-25
      • 1970-01-01
      • 1970-01-01
      • 2018-02-28
      • 2011-08-18
      • 1970-01-01
      • 1970-01-01
      • 2015-08-12
      • 2020-05-25
      相关资源
      最近更新 更多