0

私はSQL 2008 dbでCIページネーションヘルパーを使用しています。

モデル上の私の機能は次のとおりです。

function get_data($limit, $offset) {
    $billing_db = $this -> load -> database('billing', TRUE);

    $billing_db -> select('stuff, stuff2, stuff3');
    $billing_db -> from('mytable');
    $billing_db -> limit($limit, $offset);
    $this -> db -> order_by("id", "asc");
    $q = $billing_db -> get();

    return $q;
}

今私のコントローラで私は次のような関数を呼び出しました:

$data['billers'] = $this -> billing_model -> get_data(10, $this -> uri -> segment(3));

デフォルトでページを開くと、10個のエントリが正しく表示されます。

次に、ページを変更すると問題が発生します。次へをクリックするとします。
これで、url セグメント 3 は 10 になりました。これは、10 番目のエントリから開始し、10 で制限する必要があります。

しかし、何が起こっているのかというと、エントリ 1 から始まり、20 レコードが表示されます。
オフセットが高くなるたびに、最初からより多くのレコードが表示されます。

何が間違っている可能性がありますか?

/**
 * Limit string
 *
 * Generates a platform-specific LIMIT clause
 *
 * @access  public
 * @param   string  the sql query string
 * @param   integer the number of rows to limit the query to
 * @param   integer the offset value
 * @return  string
 */
function _limit($sql, $limit, $offset)
{
    $i = $limit + $offset;

    return preg_replace('/(^\SELECT (DISTINCT)?)/i','\\1 TOP '.$i.' ', $sql);
}
4

1 に答える 1