アフィリエイト広告を利用しています
検索
<< 2023年04月 >>
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30            
最新記事
タグクラウド
カテゴリーアーカイブ
ファン
最新コメント
プロフィール
ゼロから始めるシステム開発さんの画像
ゼロから始めるシステム開発
 こんにちは!ナビゲータのEVEです。各種研究室を用意し、次期EVEシステムを製造しようと日々頑張っています。現在一番力を入れているのが、資金調達です。このブログもその一環ですので、ご協力いただければ嬉しいです。
プロフィール

2023年04月19日

便利なプログラムをご紹介します [プログラム研究室]


 こんにちは!
 ナビゲータのEVEです。

 今日は病院に行く用事があり、プログラム開発の進捗はあまりありません。
 そんな中、報告できることを考えていたところ、修正中のプログラムの中に便利なものがあったので、紹介したいと思います。

[DB検索制限関数]
 株式市場の情報は日々4,000件のレコードが発生します。その日々のレコードの情報を高値、安値、始値、終値等で検索した場合、全市場でどのくらいのボリュームの株価なのか知りたいときがあります。そんなランキング関連のシステムで利用するのに便利なプログラムが以下のDB検索制限関数です。



/*************************************************
*【メソッド名】DB検索制限関数
*【 引 数 】
* p_sql;sql(select)文
* p_limit;行数
* p_page ;ページ数(相対位置0)*
*【返 却 値】
* 正常時:配列(検索結果)
* 異常時:エラーメッセージ
*【製 造 者】EVE
*【製造年月日】2005年2月20日
*【更新年月日】2023年4月16日
*【リリース日】
*【バージョン】
*【 概 要 】
* 範囲を指定してレコードを取得する
*【 備 考 】
* line  当該レコードの行数を示す。
* record 当該検索結果の総件数を示す。
*************************************************/

function gb_dbLmSelect($p_ssql,
$p_limit,
$p_page ) {
//変数定義
$i = 0;
$ans = "";
$Bind = array();
$db;
$count;
$array = array();
$row0 = array();
$row1 = array();
$value = "";

//引数の判定
//SQL文の判定を行う

if ( $p_ssql == "" ) {
//エラーメッセージを設定し呼び出し元へ制御を移す
return "SQL文が設定されていません";
}
//取得ページ内レコード数の判定を行う
if ( !is_numeric($p_limi) ) {
//エラーメッセージを設定し呼び出し元へ制御を移す
return "取得ページ内レコード数は数値でなければいけません";
}
//取得ページの判定を行う
if ( !is_numeric($p_page) ) {
//エラーメッセージを設定し呼び出し元へ制御を移す
return "取得ページは数値でなければいけません";
}

//❶開始位置の計算
$start = $p_limit * $p_page;

//❷SQL文編集
$p_sql = $p_ssql." limit ".$start.",".$p_limit;

//インスタンス作成
$db = new getDB(db,host,'utf8',user,pass);

//Fetchメソッドを実行する
$ans = $db->selectFetch(1,$p_sql,$Bind);

//返却値の判定を行う
if ( $ans == false ) {
//Fetchメソッドでエラーが発生した場合、
//返却値を設定し呼び出し元へ制御を移す

return $db->processMessage;
}

//件数をカウントする
$count = $db->Count;

//件数カウントの結果0件の場合呼び出し元へ制御を戻す
if ( $count == 0 ) {
//取得結果が0件だった場合、件数カウントをセットし呼び出し元へ制御を移す
return $count;
} else {
//オブジェクトの編集
//取得データ終了まで以下の処理を実行する

foreach ($ans as $row0) {
//❸行数を返却値に設定する
$array[$i]['line'] = $start + $idx + 1;
//カラム終了まで以下の処理を実行する
foreach ($row0 as $row1 => $value) {
//返却値オブジェクトへ検索結果をセットする
$array[$i][$row1] = $value;
}
//❹取得レコード変数をレコードへ設定する
$array[$idx - 1]['record'] = $count;
//行数カウンタに1加算する
$i++;
}
}

//検索結果を返却値に設定し呼び出し元へ制御を移す
return $array;
}




[DB検索制限関数の機能]
 株式市場において、1ページに4,000件のレコードを表示する場合、画面を送信するだけでも時間がかかる上に、編集処理も遅くなります。そこで、この問題に対応するために開発されたのがDB検索制限関数です。この関数の機能は以下の通りです。

@テーブルの中から、検索件数を限定して検索することができます。
A検索結果のランキングを呼び出し元に返却することができます。
B画面の下部にページリンクタグを表示することができ、ページネーションに最適です。
Cレコード全体の件数を把握することができます。

以上がDB検索制限関数の機能です。
 @はプログラム中の❶❷で実現しており、検索件数を限定しています。
 Aは❸で実現しており、検索結果のランキングを返却します。
 Bは❶で実現しており、$p_limitが表示件数、$p_pageが開始ページを示します。
 Cは❹で実現しており、全体のレコード件数を取得することができます。なお、全レコードに検索レコード件数を設定しているのは、プログラム開発時にどこでどう使用されるのかが不明だったためです。

[あとがき]
 以上がDB検索制限関数についての説明でした。このプログラムは、パフォーマンスが良く、呼び出し元のプログラムの編集も簡単にできるため、おすすめです。ただし、❹については、検索結果のレコード件数ではなく、テーブル内のレコード件数を取得できるようにする方が望ましいです。ただ、テーブル全体のレコード件数を取得するとパフォーマンスが悪くなるため、このような仕様になっていると思われます。

 明日以降は、ガンガン、プログラム修正に取り組む予定です。また、良いプログラムがあれば紹介します。

 では、また!

■Prototype EVE変更プログラム進捗状況
 修正プログラム本数 7/26本(1本プログラム修正)
 修正プログラムステップ数 359/2233ステップ(102ステップのプログラム修正)