Level 5 データベース閲覧システムの作成
作成したデータベースを、QBE (Query by Example) 形式で、検索するシステムを構築せよ。 ヒント: 使用する言語は任意で良い。PHP, Java, Perl などを使用すれば、既に WWW 上にあるプログラムを少し修正するだけでできるはずだ。
アルゴリズム
プログラムは大きく分けて、検索条件を入力する入力部と 入力された文字列を元にSQL文を生成する生成部、生成したSQLを実行し 検索結果を表示する出力部の3つに分けられる。
QBE(Query By Example)を使った検索システムは次項Level6で実現する、 phpでフォームを実現するにはhtmlと組み合わせる必要があるため。 本レベルでは入力された検索条件からSQL文を生成する生成部を作成する。 入出力は標準入力と標準出力を使用する。
作成したプログラム
serchdata.php OracleデータベースへのアクセスはOracle関数oci8を利用して実現している。
--入力部は省略-- /*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@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 ----------------------------------------------- --略--上記のようにちゃんと動作していることが分かる。問題点は検索結果が多過ぎる と結果の表示が大変なことになってしまう。また、カテゴリを指定しないで検索 ができないので次レベル以降改良して行く。
おまけ
上記プログラムを作るために作ったテストプログラムを下記に示す。
以上
- データベースへのアクセスをテストするプログラム : test.php
- 入力を受け取って~をテストするプログラム : database.php
- 上記ファイルの関数群: sql.php
Level4 index Level6