我被要求在我的工作中修复一个php函数。原型是:
function select($cols, $table, $cond, $order, $start, $max);
它使用odbc_exec()查询数据库,并返回odbc_num_rows()的行数。功能代码如下:
$this->query = "SELECT $cols FROM $table ";
if($cond) $this->query .= "WHERE $cond";
if($order) $this->query .= " ORDER BY ".$order;
此功能在很多地方使用,所以我无法从头开始编写。它从许多表中获取记录。直到昨天它还没有使用$ max变量,所以它正在读取数据库中的所有记录。他们正在使用iSeries Access ODBC驱动程序。我看了here的答案,但找不到。
我想使用$ start变量,从$ start开始读取并读取$ max行。如果$ start为100且$ max为50,我想获得100-150之间的记录。我昨天补充了这一部分:
if($max) $this->query .= " FETCH FIRST " . $max . " ROWS ONLY ";
我找不到任何对我的问题有用的东西。我知道我可以使用id或类似的东西为一张桌子做这件事。但我正在寻找一个通用的解决方案。
答案 0 :(得分:0)
也许这会有所帮助:
答案 1 :(得分:0)
我解决了这个问题。
首先,您需要使用php将$ cols中的每个列名转换为$ table.columnName。
$this->query .= " ( SELECT ROW_NUMBER() OVER() AS rownum, $convertedColumns
FROM $table ) AS tmp WHERE rownum > ". $start ." " ;
if($max) {
$last = $start + $max;
$this->query .= " AND rownum <= ". $last . " ";
}
结果查询如下所示:
SELECT $cols FROM
( SELECT ROW_NUMBER() OVER() AS rownum, $convertedCols ) AS tmp
WHERE rownum > $start AND rownum <= $max