2015-06-24 91 views
2

因此,我必須使用DB2爲站點數據庫分頁,每頁顯示10個結果。但是,當我使用FETCH FIRST 10 ROWS ONLY時,所有頁面顯示相同的10個第一個結果。我搜索並認爲我必須使用BETWEEN 0 AND 9與範圍變量,但不管我做了什麼,我似乎無法得到正確的SQL代碼。我總是收到錯誤信息odbc_fetch_row(): supplied argument is not a valid ODBC result resource帶有變量的DB2 SQL分頁BETWEEN

我創建了偏移變量:

//offset for the query 
$limit = 10; 
$offset = ($currentpage - 1) * $limit; 
$start = $offset + 1; 
$end = min(($offset + $limit), $total); 
$offsetend = $end - 1; 

,並得到從數據庫的信息:

$busca=""; 
    if(isset($_GET['palavra'])) 
    { 
     $busca=($_GET['palavra']); 
    } 
    $SQL1 = "SELECT PALAVRA.CODPAL, PALAVRA.NMPAL, PALAVRA.NMLIBTRANS 
    FROM (SELECT ROW_NUMBER() OVER (ORDER BY PALAVRA.NMPAL ASC) AS ROWNUM 
    FROM MAXADM.PALAVRA WHERE PALAVRA.NMPAL LIKE '$busca%') AS P 
    WHERE P.ROWNUM BETWEEN $offset AND $offsetend"; 

    $rs1=getInfo($SQL1); 
    while(odbc_fetch_row($rs1)) 
    { 
    $cod_palavra = odbc_result($rs1,"CODPAL"); 
    $palavra = odbc_result($rs1,"NMPAL"); 
    $librastrans = odbc_result($rs1,"NMLIBTRANS"); 
    } 

我在做什麼錯?非常感謝!

回答

2

由於它是目前寫的,與相關名P子選擇只包含一列,ROWNUM

SELECT PALAVRA.CODPAL, PALAVRA.NMPAL, PALAVRA.NMLIBTRANS 
FROM (
    SELECT ROW_NUMBER() OVER (ORDER BY PALAVRA.NMPAL ASC) AS ROWNUM 
    FROM MAXADM.PALAVRA WHERE PALAVRA.NMPAL LIKE '$busca%' 
) AS P 
WHERE P.ROWNUM BETWEEN $offset AND $offsetend 

,所以你顯然不能從中選擇PALAVRA.CODPAL, PALAVRA.NMPAL, PALAVRA.NMLIBTRANS

嘗試重寫查詢作爲

SELECT P.CODPAL, P.NMPAL, P.NMLIBTRANS 
FROM (
    SELECT 
    PALAVRA.CODPAL, PALAVRA.NMPAL, PALAVRA.NMLIBTRANS, 
    ROW_NUMBER() OVER (ORDER BY PALAVRA.NMPAL ASC) AS ROWNUM 
    FROM MAXADM.PALAVRA WHERE PALAVRA.NMPAL LIKE '$busca%' 
) AS P 
WHERE P.ROWNUM BETWEEN $offset AND $offsetend 
+0

它的工作!非常感謝 !!! :) –