DB2 SQL 带有变量 BETWEEN 的分页
DB2 SQL Pagination with a variable BETWEEN
因此,我必须使用 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
。
我为偏移量创建了变量:
//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");
}
我做错了什么?非常感谢!
按照目前的写法,关联名称为 P
的子 select 仅包含一列,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
所以你显然不能 select 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
因此,我必须使用 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
。
我为偏移量创建了变量:
//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");
}
我做错了什么?非常感谢!
按照目前的写法,关联名称为 P
的子 select 仅包含一列,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
所以你显然不能 select 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