2016-07-06 19 views
0

このコードで何が問題なのか分かりませんが、FULL JOINを使用するとJOINされたテーブルでページングが継続します。私はJOINedテーブルが最初のテーブルより多くの行を持っている場合、結果は空のhtmlテーブルですが、多くのページがあることを意味します。 JOINedテーブルを削除すると、結果は5-6行の通常のテーブルになります。しかし、JOINとテーブルがinfoで5-6行、空のセルで100になったとき。 このコードのアドバイスはありますか?あるいは、私は他のコードを使用する必要がありますか?私はページングがそのような痛みであることを信じることはできません、良い作業コードを見つけることができません。 ありがとうございます!FULL JOINを使用したPHP pdoのページ付け

{ 
/* 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())); 
} 
} 

答えて

0

友人が私に私に答えを与える: は、ここでトラブルコードです。 答えはJOIN句にあり、INNER JOINではなくFULL JOINである必要があります。そして、この$row = $sth->fetch(PDO::FETCH_NUM);の代わりにこれを$row = $sth->fetch(PDO::FETCH_LAZY);に変更し、必要なところで名前付きパラメータを使用する必要があります。

関連する問題