【コラム】
FX.php、FileMaker API for PHPの基本操作からパフォーマンス比較、そしてFMCakeMixの基本操作チュートリアルを紹介してきた。1回目ではFX.phpで複合検索をおこなうにあたり-findquery/-queryの構造を、2回目ではFX.phpで-findquery/-queryを使った複合検索のコーディングを紹介した。今回はさまざまな検索パターンを取りあげよう。
前回に引きつづき、-findqueryと-queryを使って実際にFX.phpでさまざまな検索パターンを試してみよう。FileMakerファイルは前回とおなじものを使用。
検索条件パターン1
まずは複合検索ではない、簡単なパターンから。-findqueryと-queryを使って「群馬県内の、最大滑走距離が2000以上かつ、最大斜度が20以上」のゲレンデを絞り込んで表示してみよう。
検索条件
1回目に紹介した実装順に沿って、クエリを組み立てる。
クエリIDとFileMakerフィールド名を紐づける。使用するクエリID数は3つ。
このクエリを連結すると、次の文字列になる。前回と同様だ。
-q1=address&-q2=length&-q3=maxAngle
続いて、クエリIDに検索したい文字列を指定する。
演算子"gte"を使わずに直接">="を検索条件にもちいているのは、前回と同様。このクエリを連結すると、次の文字列になる。
-q1.value=群馬&-q2.value=>=2000&-q3.value=>=30
最後に、-queryクエリパラメータでクエリIDを指定して、検索条件を組み立てる。
-query=(q1,q2,q3)
これらのクエリを連結して検索リクエストを発行すると次の構文となる。
-q1=address&-q2=length&-q3=maxAngle&
-q1.value=群馬&-q2.value=>=2000&-q3.value=>=30&
-query=(q1,q2,q3)&
-findquery
FX.phpを使った実装例は次のとおり。
FX.php 検索パターン1サンプル
<?php
include_once('../fx/FX.php');
include_once('../fx/FX_Fuzzy_Debugger.php');
$data = new FX('localhost', 80, 'FMPro9', 'http');
$data->SetDBData('fxphp_tips.fp7','複合検索テスト_ゲレンデ情報');
$data->SetDBUserPass('admin','');
$data->SetCharacterEncoding('utf8');
$data->SetDataParamsEncoding('utf8');
// 1. クエリIDとFileMakerフィールド名を紐付け
$data->AddDBParam('-q1', 'address');
$data->AddDBParam('-q2', 'length');
$data->AddDBParam('-q3', 'maxAngle');
// 2. クエリIDに検索したい文字列を指定
$data->AddDBParam('-q1.value', '群馬');
$data->AddDBParam('-q2.value', '>=3000');
$data->AddDBParam('-q3.value', '>=30');
// 3. クエリIDを使用して、検索条件を組み立てる
$data->AddDBParam('-query', '(q1,q2,q3)');
// 検索実行
$result = $data->DoFXAction('-findquery', true, true, 'full');
?>
<table>
<tr>
<th>
serial
</th>
<th>
ゲレンデ名
</th>
<th>
住所
</th>
<th>
最大滑走距離
</th>
<th>
最大斜度
</th>
</tr>
<?php
foreach ($result['data'] as $key => $record)
{
?>
<tr>
<td>
<?php echo $record['serial'][0]; ?>
</td>
<td>
<?php echo $record['name'][0]; ?>
</td>
<td>
<?php echo $record['address'][0]; ?>
</td>
<td>
<?php echo number_format($record['length'][0]); ?>m
</td>
<td>
<?php echo $record['maxAngle'][0]; ?>
</td>
</tr>
<?php
}
?>
-findquery/-queryは「複数の検索レコードおよびレコード除外リクエストを使用して、検索リクエストを送信
」する機能だが、今回のように複合ではなく、単純な検索条件でも動作する。
検索条件パターン2
続いてやや複雑な複合検索のパターンをためす。「群馬県または長野県または新潟県の、最大滑走距離が3000以上か、最大斜度が30以上」のゲレンデを絞り込んで表示してみよう。
検索条件
クエリIDとFileMakerフィールド名を紐づける。使用するクエリID数は5つ。
このクエリを連結すると、次の文字列になる。
-q1=address&-q2=address&-q3=address&-q4=length&-q5=maxAngle
続いて、クエリIDに検索したい文字列を指定する。
-q1, -q2, -q3には住所の検索条件を指定すれば良いので、ここに検索したい都道府県「群馬」「長野」「新潟」を指定する。
-q1.value=群馬&-q2.value=長野&-q3.value=新潟&-q4.value=>=2000&-q5.value=>=30
最後に、-queryクエリパラメータでクエリIDを指定して、検索条件を組み立てる。
-query=(q1,q4);(q1,q5);(q2,q4);(q2,q5);(q3,q4);(q3,q5)
これらのクエリを連結して検索リクエストを発行すると次の構文となる。
-q1=address&-q2=address&-q3=address&-q4=length&-q5=maxAngle&
-q1.value=群馬&-q2.value=長野&-q3.value=新潟&-q4.value=>=2000&-q5.value=>=30&
-query=(q1,q4);(q1,q5);(q2,q4);(q2,q5);(q3,q4);(q3,q5)&
-findquery
パッと見長くて複雑なクエリだが、これらは先の1~6番目の検索条件をクエリIDに置きかえているだけ。このクエリはFileMaker Proで検索をおこなう場合、次の検索条件と同様の意味となる。
FX.phpを使った実装例は次のとおり。
FileMakerでの検索結果とWebブラウザでの表示結果は次のとおり。
複雑な複合検索条件でもこのように段階を踏んでクエリを構築していけば、意外とさくっと実装できてしまう。複合検索を実装する場面になったら、まずは要件を「簡単な日本語」に直すところから。その後「FileMaker Proならどのように検索すれば良いか」を考え、各クエリIDに置きかえたあとの構文がイメージできれば実装できたも同然だ。くり返しになるが、何回も自分で検索のパターンを作り、コーディングをおこなって試行錯誤しながら覚えよう。
| 【インタビュー】FileMaker Goが目指す先は - ファイルメーカー社長ビル・エプリング氏に聞く [2010/11/4] |
| 【ハウツー】FileMaker Pro×Webの可能性 - 外部Webアプリと連携する方法とは [2010/10/26] |
| 【ハウツー】デベロッパに嬉しいFileMaker Pro 11の新機能とは [2010/10/1] |
| FileMaker ProのiPhone/iPadアプリ「FileMaker Go」登場 [2010/7/21] |
| ファイルメーカー、「FileMaker カンファレンス 2010」を10月に開催 [2010/7/2] |
| ファイルメーカー、FileMakerセミナーイベントを6月に5都市で開催 [2010/4/20] |
| 「FileMaker Pro 11」発表 - グラフ作成機能やクィック検索を搭載 [2010/3/10] |
| セメント鉱物の一種が高温用圧電センサ材料に - 東工大などが発見 [18:13 6/19] |
| 九大、植物の気孔開口に必要なK+チャネルの働きに必要な転写因子を発見 [17:59 6/19] |
| NICTなど、酸化ガリウムを用いたMOSトランジスタを開発 [16:57 6/19] |
| NIBBなど、分裂時の植物細胞内の仕切りができる様子を高解像度で撮影 [16:23 6/19] |
| 筑波大など、眠気は起きている間の経験で変動することなどを発見 [15:57 6/19] |
|
カメラの顔認識を阻害するプライバシーバイザー [00:00 6/20] エンタープライズ |
|
「GANTZ」連載13年でついに完結、戦いの結末を目撃せよ [00:00 6/20] ホビー |
|
サラ・イイネス「大阪豆ゴハン」がDモーニングで復刻連載 [00:00 6/20] ホビー |
|
[GANTZ]13年にわたる壮大なストーリーに終止符 意味深メッセージも [00:00 6/20] ホビー |
|
イシデ電「私という猫~呼び声~」、刊行記念で特典も [23:38 6/19] ホビー |