oracle|プログラム|ページング
ページングテスト<メタ名="ジェネレーター" CONTENT="TextPad 4.0">
// MySQL の「制限」のように、結果をページに分割するにはどうすればよいですか?
// =============== ============================================
// ニールによるチュートリアルCraig (neilc@netactive.co.za)
// Date: 2001-06-05
// この例では、
// 結果が開発者が出力したい内容を超えるデータベース クエリのページングについて説明します。ページですが、
// 結果を別のページに分割したいと考えています。
// このチュートリアルでアクセスするテーブル "SAMPLE_TABLE" には、
// PK_ID、FIELD1、FIELD2、FIELD3 の 4 つのフィールドがあります。タイプは重要ではありませんが、
// PK_ID フィールドに主キーを定義する必要があります。
$display_rows = 5; // 一度に表示する行数。
// 必要に応じてこれを変更できます。
// Oracle データベースに接続します
putenv("ORACLE_SID=purk");
putenv("ORACLE_HOME=/export/oracle8i");
putenv("TNS_ADMIN=$) ORACLE_HOME/network/admin");
$OracleDBConn = OCILogon("purk","purk","lengana.world");
// このクエリはレコードをカウントします
$sql_count = "SELECT COUNT(*) FROM SAMPLE_TABLE ";
// SQL 文字列を解析して実行
$row_count=OCIParse($OracleDBConn, $sql_count);
OCIExecute($row_count);
// 解析され実行されたクエリから、見つかったレコードの量を取得します。
// 新しいレコードが許可されているため、この結果をセッション変数に保存しません
//結果
//が出力される間、別のユーザーが入力したとおりに表示されます。
if (OCIFetch($row_count)) {
$num_rows = OCIResult($row_count,1);
} else {
$num_rows = 0; // レコードが見つからなかった場合
}
// このクエリに使用されたリソースを解放します
OCIFreeStatement($row_count);
// 結果をページとして出力するクエリを準備する必要があります。
// クエリについて詳しく説明します。
// URL にページが指定されていない場合 (例: http://mysite.com/result.php?page=2)、
// それを設定します1 ページ目へ。
if (empty($page) || $page == 0) {
$page = 1;
}
// 結果を印刷する開始範囲
$start_range = (($ page - 1) * $display_rows) + 1;
// 結果を出力する終了範囲
$end_range = $page * $display_rows;
// メインクエリ。これは、それぞれ
// にネストされた 3 つの「SELECT」ステートメントで構成されます。中央のクエリは、必要な
// レコードを返すために通常使用するクエリです。このステートメントで順序と "WHERE" 句を指定しますか?
// 結果を制限するために行を選択しますが、順序付けが完了する前に行番号が
// 行に割り当てられるため、コードで
// を出力させます。 result unsorted.
// 2 番目にネストされた "SELECTED" は、新しい行番号を result に割り当てます
// 選択できるようにします。
$sql = "SELECT PK_ID, FIELD1, FIELD2, FIELD3, ROW_NO FROM (SELECT PK_ID, ";
$sql .= "FIELD1, FIELD2, FIELD3, ROWNUM ROW_NO FROM (SELECT PK_ID, FIELD1, ";
$sql .= "FIELD2, FIELD3 FROM SAMPLE_TABLE ORDER BY FIELD3)) WHERE ROW_NO BETWEEN ";
$sql . = $start_range." AND ".$end_range;
// 結果の書式設定を開始します
echo "
";
echo "";
echo "PK ID | ";
echo "フィールド 1 | ";
echo "フィールド 2 | ";
echo "フィールド 3< /b>"; echo " | 行番号 | ";
echo "
";
if ($num_rows != 0) {
// SQL文字列を解析して実行
$rs=OCIParse($OracleDBConn, $sql);
OCIExecute($rs);
// 後で使用するために列の数を取得します
$num_columns = OCINumCols($rs);
while (OCIFetch($rs)){
echo "";
for ($i = 1; $i $column_value = OCIResult($rs,$i);
echo "$column_value | ";
}
echo "
";
}
} else {
// レコードが見つからなかったことを示すメッセージを出力します
echo "申し訳ありません! レコードがありませんでしたfound |
";
}
// テーブルを閉じる
echo "
";
// リソースを解放し、接続を閉じる
OCIFreeStatement($rs);
OCILogoff( $OracleDBConn);
?>
// ここで他のページへのリンクを印刷します
// ページ数の計算
if ($num_rows % $display_rows == 0) {
$total_pages = $num_rows / $display_rows;
} else {
$total_pages = ($num_rows / $display_rows) + 1;
settype($total_pages, integer); // 変数を四捨五入します
}
// これが最初のページでない場合は、前のページへのリンクを出力します
if ($page != 1) {
echo "
前";
}
// これで、他のページへのリンクを印刷できます
for ($i = 1; $i < ;= $total_pages; $i++) {
if ($page == $i){
// 現在のページへのリンクを印刷しません
echo " ".$i;
} else {
//他のページへのリンク
echo "
".$i."";
}
}
// これが最後のページでない場合は、次のページへのリンクを印刷します
if ($page < $total_pages) {
echo "
Next";
}
?>
// このセクションを追加して、追加情報用の変数
// およびいくつかのデバッグ
echo "
総ページ数: ".$total_pages."
";
echo "
レコード数: ".$num_rows."
";
echo "
SQL クエリは: ".$sql."
";
?>