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);
}

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

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2013/01/02 20:45:07
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:oil999 No.1

回答回数1728ベストアンサー獲得回数320

ポイント300pt

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

id:yayayai

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

2013/01/02 20:44:53

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません