Level 5 データベース閲覧システムの作成

作成したデータベースを、QBE (Query by Example) 形式で、検索するシステムを構築せよ。 ヒント: 使用する言語は任意で良い。PHP, Java, Perl などを使用すれば、既に WWW 上にあるプログラムを少し修正するだけでできるはずだ。

アルゴリズム

プログラムは大きく分けて、検索条件を入力する入力部と 入力された文字列を元にSQL文を生成する生成部、生成したSQLを実行し 検索結果を表示する出力部の3つに分けられる。

QBE(Query By Example)を使った検索システムは次項Level6で実現する、 phpでフォームを実現するにはhtmlと組み合わせる必要があるため。 本レベルでは入力された検索条件からSQL文を生成する生成部を作成する。 入出力は標準入力と標準出力を使用する。

作成したプログラム

serchdata.php
--入力部は省略--
/*SQL文を生成*/
$sql="select * from ".$table[$data[0]];

for($i=1;$i<count($data);$i++){
 if($data[$i]!=NULL){
  if(!$fr){
   $sql=$sql." where ";
    $fr=TRUE;
  }else{
  $sql=$sql." AND ";
 }
 if($i!=count($data)-1){
  if($i==1||$i==2){
   $data[$i]=ereg_replace('[[:space:]]',"%' OR $colm[$i] LIKE '%",$data[$i]);
   $sql=$sql.$colm[$i]." LIKE '%".$data[$i]."%'";
   }else{
   $sql=$sql.$colm[$i]." = '".$data[$i]."' ";
   }
   }else{
   $sql=$sql.$colm[$i]." <= ".$data[$i];
   }
 }
/*SQLを実行*/
$con=oci_connect("SYSTEM","toybox","");
$stmt=oci_parse($con,$sql);
if(!oci_execute($stmt,OCI_DEFAULT)){
 echo "execute erorr!?n";
 oci_close($con);
 exit;
}
//select結果を受け取る
$ros=oci_fetch_all($stmt,$res);
--出力部は省略--
OracleデータベースへのアクセスはOracle関数oci8を利用して実現している。

実行結果

[oracle@pw008 soba]$ php serchdata.php 
Database Serch System
カテゴリの番号を選択
1.AV・デジタル 2.家電 3.パソコン 4.オフィス 5.CD・DVD
>5
商品名を入力
>
キーワードを入力
>サップ
型番を入力
>
値段を入力(以下)
>
select * from item_cdvd where ITEM_MAKER LIKE '%サップ%' 
         1 件ヒットしました。

番号:2641625017
メーカー:ボブ・サップ
商品名:SAPPTime!
型番:4988018313977
特価 : 1050円
158ポイント
定価 : 1050
[oracle@pw008 soba]$ php serchdata.php 
Database Serch System
カテゴリの番号を選択
 1.AV・デジタル 2.家電 3.パソコン 4.オフィス 5.CD・DVD
>2
商品名を入力
>DVD
キーワードを入力
>SONY 東芝
型番を入力
>
値段を入力(以下)
>1000
select * from item_kaden where ITEM_NAME LIKE '%DVD%' AND ITEM_MAKER
LIKE '%SONY%' OR ITEM_MAKER LIKE '%東芝%' AND ITEM_PRICE <= 1000 
         59 件ヒットしました。
番号:701284013
メーカー:東芝
商品名:アルカリ単4形6本入エコパッケージ
型番:LR03AG6EC
特価 : 525円
58ポイント
定価 : オープンプライス
-----------------------------------------------
番号:712549019
メーカー:東芝
商品名:ミニクリX
型番:KR100V54WXWLA
特価 : 380円
38ポイント
定価 : 473
-----------------------------------------------
--略--

上記のようにちゃんと動作していることが分かる。問題点は検索結果が多過ぎる と結果の表示が大変なことになってしまう。また、カテゴリを指定しないで検索 ができないので次レベル以降改良して行く。

おまけ

上記プログラムを作るために作ったテストプログラムを下記に示す。

以上
Level4 index  Level6