2015-11-10 35 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