2015-11-10 29 views
1

hy,我有一個問題,使用PHP和oracle數據庫設置分頁,頁面只顯示第一頁的值。當我點擊下一個按鈕,頁面從頁面1改變到頁面2,頁面3等,但價值仍然與頁面1相同。我不知道,我也沒有任何想法來解決這個錯誤..分頁始終顯示頁面第一

here是我設置的記錄集代碼..

<?php 
// Set up recordset 
define("ewSqlSelectCount", "SELECT count(*) count FROM sid_mst_dealer", true); 
$sSql_count = BuildSqlang(ewSqlSelectCount, ewSqlWhere, ewSqlGroupBy, ewSqlHaving, ewSqlOrderBy, $sDbWhere, $sOrderBy); 
//echo "$sSql_count" . "<br/ >"; 
$rs_count = moi_query($sSql_count , $conn) or die("Failed to execute query at line " . __LINE__ . ": " . moi_error($conn) . '<br>SQL: ' . $sSql); 
//echo $rs_count; 
oci_execute($rs_count); 
$nTotalRecs = oci_fetch_array($rs_count); 
$nTotalRecs = $nTotalRecs['COUNT']; 

$rs = moi_query($sSql, $conn) or die("Failed to execute query at line " . __LINE__ . ": " . moi_error($conn) . '<br>SQL: ' . $sSql); 
//echo $rs; 
oci_execute($rs); 

if ($nDisplayRecs <= 0) { // Display all records 
    $nDisplayRecs = $nTotalRecs; 
} 
$nStartRec = 1; 
SetUpStartRec(); // Set up start record position 
?> 

這是功能..

function SetUpStartRec() 
{ 

    // Check for a START parameter 
    global $nStartRec; 
    global $nDisplayRecs; 
    global $nTotalRecs; 
    if (strlen($_GET[ewTblStartRec]) > 0) 
    { 
    $nStartRec = $_GET[ewTblStartRec]; 
    $_SESSION[ewSessionTblStartRec] = $nStartRec; 
    } elseif (strlen($_GET["pageno"]) > 0) 
    { 
    $nPageNo = $_GET["pageno"]; 
    if (is_numeric($nPageNo)) 
    { 
     $nStartRec = ($nPageNo-1)*$nDisplayRecs+1; 

     if ($nStartRec <= 0) 
     { 
      // echo 'jangan ke sini'; 
      $nStartRec = 1; 
     } 
     elseif ($nStartRec >= (($nTotalRecs-1)/$nDisplayRecs)*$nDisplayRecs+1) 
     { 
      $nStartRec = (($nTotalRecs-1)/$nDisplayRecs)*$nDisplayRecs+1; 

     } 
     $_SESSION[ewSessionTblStartRec] = $nStartRec; 
    } 
    else 
    { 

     $nStartRec = $_SESSION[ewSessionTblStartRec]; 
     if (!(is_numeric($nStartRec)) || ($nStartRec == "")) 
     { 
      $nStartRec = 1; // Reset start record counter 
      $_SESSION[ewSessionTblStartRec] = $nStartRec; 
     } 
    } 
} 

else 
{ 
    $nStartRec = @$_SESSION[ewSessionTblStartRec]; 
    if (!(is_numeric($nStartRec)) || ($nStartRec == "")) { 
     $nStartRec = 1; // Reset start record counter 

     $_SESSION[ewSessionTblStartRec] = $nStartRec; 
    } 
} 
} 

,這裏是查詢

<?php 
    define("ewTblVar", "sid_mst_dealer", true); 
    define("ewTblRecPerPage", "RecPerPage", true); 
    define("ewSessionTblRecPerPage", "sid_mst_dealer_RecPerPage", true); 
    define("ewTblStartRec", "start", true); 
    define("ewSessionTblStartRec", "sid_mst_dealer_start", true); 
    define("ewTblShowMaster", "showmaster", true); 
    define("ewSessionTblMasterKey", "sid_mst_dealer_MasterKey", true); 
    define("ewSessionTblMasterWhere", "sid_mst_dealer_MasterWhere", true); 
    define("ewSessionTblDetailWhere", "sid_mst_dealer_DetailWhere", true); 
    define("ewSessionTblAdvSrch", "sid_mst_dealer_AdvSrch", true); 
    define("ewTblBasicSrch", "psearch", true); 
    define("ewSessionTblBasicSrch", "sid_mst_dealer_psearch", true); 
    define("ewTblBasicSrchType", "psearchtype", true); 
    define("ewSessionTblBasicSrchType", "sid_mst_dealer_psearchtype", true); 
    define("ewSessionTblSearchWhere", "sid_mst_dealer_SearchWhere", true); 
    define("ewSessionTblSort", "sid_mst_dealer_Sort", true); 
    define("ewSessionTblOrderBy", "sid_mst_dealer_OrderBy", true); 
    define("ewSessionTblKey", "sid_mst_dealer_Key", true); 

    // Table level SQL 
    define("ewSqlSelect", "SELECT * FROM sid_mst_dealer", true); 
    if($_REQUEST[dealer_id]==""){ 
    if($_REQUEST[x_status]!=""){ 
    define("ewSqlWhere", " active_flag ='".$_REQUEST[x_status]."'", true); 
    }else{ 
     define("ewSqlWhere", "active_flag='0'", true); 
    } 
    }else{ 
    define("ewSqlWhere", "", true); 
    } 
    define("ewSqlGroupBy", "", true); 
    define("ewSqlHaving", "", true); 
    define("ewSqlOrderBy", "", true); 
    define("ewSqlOrderBySessions", "", true); 
    define("ewSqlKeyWhere", "dealer_id = '@dealer_id'", true); 
    define("ewSqlUserIDFilter", "", true); 
?> 

我真的需要幫助來解決這個問題..謝謝你:D

+0

該代碼是非常難以閱讀 - 有一個'limit'條款潛伏在那裏? – RamRaider

+0

@RamRaider我也有同樣的問題與你,這不是我的代碼,我只做這個增強。所以我沒有任何想法..真的很困惑..我試圖理解這一點,但它很難。 – user3661054

+0

@ user3661054如果您需要實現分頁查詢,然後查看[**分頁查詢是如何工作的**](http://stackoverflow.com/questions/30321483/how-rownum-works-in-pagination-query/30321788 #30321788) –

回答

0

我認爲問題是缺乏限制在這個晦澀的sql這是難題的分頁方面的關鍵部分。如果您考慮以下因素:

select * from `users` where `name`='fred' limit 0,10; 

,將顯示前10條記錄,其中用戶被稱爲「弗雷德」,然後

select * from `users` where `name`='fred' limit 10,10; 

第二條語句將顯示接下來的10條記錄用戶在哪裏所謂的「弗雷德」

我只是不明白你的方法在構建sql,但IMO你需要添加一個限制 - 和相關的邏輯來計算你在記錄集中的哪個page,以便你可以添加下一個/以前的鏈接。

+0

這應該是Oracle SQL語法嗎?因爲Oracle中不支持「LIMIT」。 –

+0

哪個 - 上面的sql?否 - 它不應該是Oracle SQL,也許在Oracle中沒有「限制」〜從未爲Oracle分區寫入sql – RamRaider

+0

什麼意思是,OP正在使用Oracle數據庫。如果該查詢將在Oracle數據庫上執行,由於語法錯誤,它會失敗,因爲Oracle不支持「LIMIT」。在Oracle中有不同的分頁方式。對於** pre-12c版本**,使用'ROWNUM'進行分頁查詢。 ** 12c **使用'FECTH'提供Top-n查詢。 http://stackoverflow.com/questions/30321483/how-rownum-works-in-pagination-query/30321788#30321788 –

0

這裏是分頁..

<table border="0" cellspacing="0" cellpadding="0"> 
        <tr> 
         <td><span >Page&nbsp;</span>&nbsp;</td> 
         <!--first page button--> 
         <?php if ($nStartRec == 1) { ?> 
         <td><img src="images/firstdisab.gif" alt="First" width="16" height="16" border="0">&nbsp;</td> 
         <?php } else { ?> 
         <td><a href="sid_mst_dealerlist.php?start=1&x_status=<?php echo $_REQUEST[x_status]; ?>"><img src="images/first.gif" alt="First" width="16" height="16" border="0"></a>&nbsp;</td> 
         <?php } ?> 
         <!--previous page button--> 
         <?php if ($PrevStart == $nStartRec) { ?> 
         <td><img src="images/prevdisab.gif" alt="Previous" width="16" height="16" border="0">&nbsp;</td> 
         <?php } else { ?> 
         <td><a href="sid_mst_dealerlist.php?start=<?php echo $PrevStart; ?>&x_status=<?php echo $_REQUEST[x_status]; ?>"><img src="images/prev.gif" alt="Previous" width="16" height="16" border="0"></a>&nbsp;</td> 
         <?php } ?> 
         <!--current page number--> 
         <td><input type="text" name="pageno" value="<?php echo intval(($nStartRec-1)/$nDisplayRecs+1); ?>" size="4">&nbsp;</td> 
         <!--next page button--> 
         <?php if ($NextStart == $nStartRec) { ?> 
         <td><img src="images/nextdisab.gif" alt="Next" width="16" height="16" border="0">&nbsp;</td> 
         <?php } else { ?> 
         <td><a href="sid_mst_dealerlist.php?start=<?php echo $NextStart; ?>&x_status=<?php echo $_REQUEST[x_status]; ?>"><img src="images/next.gif" alt="Next" width="16" height="16" border="0"></a>&nbsp;</td> 
         <?php } ?> 
         <!--last page button--> 
         <?php if ($LastStart == $nStartRec) { ?> 
         <td><img src="images/lastdisab.gif" alt="Last" width="16" height="16" border="0">&nbsp;</td> 
         <?php } else { ?> 
         <td><a href="sid_mst_dealerlist.php?start=<?php echo $LastStart; ?>&x_status=<?php echo $_REQUEST[x_status]; ?>"><img src="images/last.gif" alt="Last" width="16" height="16" border="0"></a>&nbsp;</td> 
         <?php } ?> 
         <td><span >&nbsp;of <?php echo intval(($nTotalRecs-1)/$nDisplayRecs+1);?></span>&nbsp;</td> 
        </tr> 
        </table> 
        <?php if ($nStartRec > $nTotalRecs) { $nStartRec = $nTotalRecs; } 
$nStopRec = $nStartRec + $nDisplayRecs - 1; 
$nRecCount = $nTotalRecs - 1; 
if ($rsEof) { $nRecCount = $nTotalRecs; } 
if ($nStopRec > $nRecCount) { $nStopRec = $nRecCount; } ?> 
        <span >Records <?php echo $nStartRec; ?> to <?php echo $nStopRec; ?> of <?php echo $nTotalRecs; ?></span> 
        <?php } else { ?> 
        <?php if ($sSrchWhere == "0=101") {?> 
        <span ></span> 
        <?php } else { ?> 
        <span >No records found</span> 
        <?php } ?> 
        <?php } ?>&nbsp;</td> 
       </tr> 
      </table> 
0

如前所述通過@RamRaider你的方法論分頁是有些模糊。 從Oracle 12c開始,您可以使用以下示例查詢來實現分頁。

SELECT fieldA,fieldB 
FROM table 
ORDER BY fieldA 
OFFSET 5 ROWS FETCH NEXT 14 ROWS ONLY; 

訪問this頁,以瞭解更多有關行限制子句前N個查詢Oracle數據庫12c的第1版(12.1)

+0

我是新手與甲骨文,所以我很困惑, – user3661054