FX.php、FileMaker API for PHPの基本操作からパフォーマンス比較、そしてFMCakeMixの基本操作チュートリアルを紹介してきた。今後はこれら3つのライブラリを中心として、さらに複雑な処理やティップス的な使い方を取りあげていこうと思う。今回はひさびさにFX.phpに戻り、FX.phpで複合検索をおこなう方法について紹介しよう。まずは-findquery/-queryの構造を理解するところからだ。

FX.phpで複合検索をおこなうには - -findquery/-queryの構造を理解する

FileMaker API for PHPではFileMaker_Command_FindRequestクラスとFileMaker_Command_CompoundFindクラスが用意されており、比較的容易にかつ直感的に複合検索を実装することが可能だ(バックナンバー - API for PHPでのレコード検索、関連メソッド紹介(2))。残念ながらFX.phpには専用のクラスや関数は用意されていないものの、FileMaker Serverに用意されている機能を使うことで同様の複合検索をおこなうことが可能。

使用するFileMaker Serverの機能は次の2つ。なお、これら2点の機能はFileMaker Server 9以降でのみ使用可能であるという点に注意されたい。

-findqueryクエリコマンド / –findquery (Compound find) query command

-queryで指定した複合検索リクエストを発行する。

  • 必須クエリパラメータ: -db, -lay, -query
  • オプションクエリパラメータ: –max, –skip, –sortorder, –sortfield, –script, –script.prefind, –script.presort

-queryクエリパラメータ / –query (Compound find request) query parameter

-findqueryクエリコマンドで使用する複合検索の検索条件を定義する。各検索条件はカッコで囲み、セミコロン区切りの複数のリクエストは、対象レコードを拡大する論理式ORでの検索として動作する。

-queryで複合検索の条件を定義する順番はおおまかに次のとおり。

  1. クエリIDとFileMakerフィールド名を紐付け
  2. クエリIDに検索したい文字列を指定
  3. クエリIDを使用して、検索条件を組み立てる

複合検索条件用のサンプル構文は次のとおり(PDFマニュアルより一部を抜粋)。

-query=(q1,q2);!(q3)&-q1=typeofanimal&-q1.value=Cat&-q2=color&-q2.value=Gray&-q3=name&-q3.value=Fluffy&-findquery

この例では、q1やq2・q3が「クエリID」となる。まずクエリIDとFileMakerフィールド名を紐づける。

-q1=typeofanimal&-q2=color&-q3=name

抜粋したこのクエリでは

  • -q1=typeofanimalで、クエリID「q1」が"typeofanimal"フィールド
  • -q2=colorで、クエリID「q2」が"color"フィールド
  • -q3=nameで、クエリID「q3」が"name"フィールド

であることを定義する。続いて、クエリIDに検索したい文字列を指定する

-q1.value=Cat&-q2.value=Gray&-q3.value=Fluffy

抜粋したこのクエリでは

  • -q1.value=Catで、フィールド「typeofanimal」が"Cat"
  • -q2.value=Grayで、フィールド「color」が"Gray"
  • -q3.value=Fluffyで、フィールド「name」が"Fluffy"

であることを指定している。最後に、-queryクエリパラメータでクエリIDを指定して、検索条件を組み立てる。

-query=(q1,q2);!(q3)

抜粋したこのクエリでは

  • 1番目の検索条件: フィールド「typeofanimal」が"Cat"かつ、フィールド「color」が"Gray"であること
  • 2番目の検索条件: フィールド「name」が"Fluffy"ではないこと

となる。これらのクエリを連結して検索リクエストを発行すると次の構文となる。

-q1=typeofanimal&-q2=color&-q3=name&
-q1.value=Cat&-q2.value=Gray&-q3.value=Fluffy&
-query=(q1,q2);!(q3)&
-findquery

このクエリはFileMaker Proで検索をおこなう場合、次の検索条件と同様の意味となる。

サンプルクエリをFileMaker Pro上で再現した場合の図。(q1;q2)はAND検索、!(q3)は除外検索となる

今回はクエリIDとフィールドの関連付け、検索条件を指定、定義の順番で組み立てた。これらの順番はとくに決まっていないので、自分が実装しやすい形で定義してOKだ。

FileMaker API for PHPではこの辺りのクエリ構文をまったく意識することなく複合検索が実装できるが、FX.phpで実装する場合はこれらの構文をマスターしておく必要がある。FileMaker API for PHPと比較するとやや取っつきづらいが、慣れてしまえばFileMaker API for PHPよりすくない手順でこれらの検索条件を簡単に組み立てることも可能になる。

次回、これらのクエリ構文をFX.phpで実現するためのコードと応用パターンを紹介しよう。