人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

cakephpで、paginateを使おうとしているのですが、
複雑なsqlをなげたいので、$model->queryをしたく、以下の内容を参考にしました。
http://cakephp.jp/modules/newbb/viewtopic.php?topic_id=1356&forum=6
このサイト内に、function paginateのところでSQL文を組み立てていますが、
当方のDBがoracleでやりたいので、limit offsetではなく、rownumにしないといけないですが、
rownumで、対応できるfunction paginateの作り方を教えてほしいですっ

function paginate($conditions, $fields, $order, $limit, $page = 1, $recursive = null) {

$offset = $page * $limit - $limit;

$sql = $conditions;
$sql .= " order by " . $order;
$sql .= " limit " . $limit;
$sql .= " offset " . $offset;

return $this->query($sql);
}

何卒よろしくお願い致します。

●質問者: FujiiRock
●カテゴリ:コンピュータ ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● oil999
●300ポイント ベストアンサー

rownumでlimit, offsetの代用をするには、SQL文そのものを変更する必要があります。
このため $condition をそのまま渡すことはできず、とりあえずテーブル名を $table に、where句を $where に渡してselectを実行するSQL文を紹介します。

<?php
function paginate($table, $where, $fields, $order, $limit, $page = 1, $recursive = null) {

$offset = $page * $limit - $limit;

$sql = select * fto (slect *, rownum as row_id from {$table} where {$where} order by {$order}) where row_id between {$offset} ans {$limit};";
return $this->query($sql);
}
?>

【参考】Oracleでlimit offsetもどき

http://d.hatena.ne.jp/yone098/20060823/1156329508


FujiiRockさんのコメント
ご回答ありがとうございますっ! 前回も助けていただいた方ですね。。感謝ですっm(_ _)m 当該のpaginate関数は、$conditionsありきの設計のようでしたので、paginate($table, $where にはしませんでしたが、はい、応用して、対応することができたです。 また、あった機会はどうぞよろしくお願い致します。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ