2016-07-06 19 views
0

Ich weiß nicht, was ist falsch mit diesem Code, aber wenn ich FULL JOIN die Seitennummerierung kontinuierlich auf der JOINed Tabelle verwenden. Ich meine, wenn die JOINed-Tabelle mehr Zeilen als die erste Tabelle hat, ist das Ergebnis eine leere HTML-Tabelle, aber mit vielen Seiten. Wenn ich die JOINed-Tabelle entferne, ist das Ergebnis eine normale Tabelle mit 5-6 Zeilen. Aber wenn JOIN und der Tisch mit 5-6 Zeilen mit Info und 100 mit leeren Zellen werden. Irgendwelche Ratschläge für diesen Code? Oder muss ich anderen Code verwenden? Ich kann nicht glauben, dass die Paginierung so ein Schmerz ist, kann keinen guten Arbeitscode finden. Vielen Dank im Voraus! ist der Fehlercode:Php PDO Paginierung mit FULL JOIN Kontinuierliches Ergebnis

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

Antwort

0

Ein Freund gib mir die Antwort auf mich. Also die Antwort ist in der JOIN-Klausel, sollte es INNER JOIN nicht FULL JOIN sein. Und statt dessen müssen $row = $sth->fetch(PDO::FETCH_NUM); zu diesem $row = $sth->fetch(PDO::FETCH_LAZY); wechseln und benannte Parameter verwenden, wo ich brauche.