Db2 выбрать из диапазона - PullRequest
1 голос
/ 22 июня 2011

Меня попросили исправить функцию 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, поэтому читал все записи из базы данных.Они используют ODBC-драйвер iSeries Access.Я посмотрел на здесь для ответа, но не смог найти.

Я хочу использовать переменную $ start, чтобы начать чтение с $ start и прочитать строки $ max.Если $ start составляет 100 и $ max 50, я хочу получить записи между 100-150.Я добавил эту часть вчера:

if($max) $this->query .= " FETCH FIRST " . $max . " ROWS ONLY ";

Я не смог найти ничего полезного для своей проблемы.Я знаю, что могу сделать это для одной таблицы, используя идентификатор или что-то в этом роде.Но я ищу общее решение.

Ответы [ 2 ]

0 голосов
/ 23 июня 2011

Я решил проблему.

Сначала вам нужно преобразовать имя каждого столбца в $ cols в $ table.columnName с помощью php.

$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
0 голосов
/ 22 июня 2011

возможно, это поможет:

ВЫБЕРИТЕ DB2 LIMIT

...