#概要
GETメソッドを用いて一覧を取得する方法をご紹介します。
まずは完成形から。
<html>
<head>
<title>一覧取得サンプル</title>
</head>
<body>
<form method="get">
<h3>価格</h3>
<input name="price__ge">円以上
<input name="price__le">円以下
<h3>色</h3>
<input type="checkbox" name="or__color" value="black">黒
<input type="checkbox" name="or__color" value="white">白
<input type="submit" value="検索">
</form>
</body>
</html>
ここに、特定条件を指定して[検索]ボタンを押したと仮定します。ここでの検索条件は1000円以上、5000円以下、色が黒または白です。
すると遷移先のURLは以下のとおりになります。
http://FQDN/table_name/list/?price__ge=1000&price__le=5000&or__color=black&or__color=white
この時、サーバー側で処理されるSQLは以下のとおりです。
--発行されるSQL
SELECT *
FROM table_name
WHERE price >= 1000
AND price <= 5000
AND (color = 'black'
OR color = 'white');
#解説
##書式
パラメタ名は次のルールで指定することができます。
[or[_ {group_name} ]] {column_name} [ {operand} ]
##OR条件
各パラメタは通常AND条件として処理されますが、ORプリフィックスを利用することで
OR条件として処理することが可能です。
OR条件判定の指定方法は以下の2パターンがあります。
- 同じ名称のカラムをORで連結する
- 違う名称のカラムをグループ化してORで連結する
###同じ名称のカラムをORで連結する
同じカラムに対してOR条件を指定するにはORプリフィックスを含むパラメタを使用します。
宿泊数が2泊、または5泊以上のデータを抽出するためのパラメタは以下の通りです。
?or__stay_day=2&or__stay_day__ge=5
###違う名称のカラムをグループ化してORで連結する
別々のカラムに対してOR条件を指定することもできます。その場合は任意のグループ名称を付与して、どの条件群がOR連結となるかを指定します。
施設のうち、トイレ・更衣室・駐車場のいずれかが有るデータを抽出するためのパラメタは以下の通りです。
?or_g1__flg_toilet=true&or_g1__flg_dressingroom=true&or_g1__flg_parking=true
##オペランド
各パラメタがどのような比較演算子で条件判定されるのかは、
パラメタのサフィックスによって決定されます。
サフィックス用のデリミタはアンダースコア2つ __
です。
値 | 内容 | 指定例 | 展開例 |
---|---|---|---|
オペランドなし | 等しい | col=1 | col=1 |
ne | 等しくない | col__ne=1 | col<>1 |
gt | より大きい | col__gt=1 | col>1 |
ge | 以上 | col__ge=1 | col>=1 |
lt | より小さい | col__lt=1 | col<1 |
le | 以下 | col__le=1 | col<=1 |
likel | 前方一致 | col__likel=abc | col like 'abc%' |
liker | 後方一致 | col__liker=abc | col like '%abc' |
like | 部分一致 | col__like=abc | col like '%abc%' |
nlikel | 前方一致しない | col__nlikel=abc | col not like 'abc%' |
nliker | 後方一致しない | col__nliker=abc | col not like '%abc' |
nlike | 部分一致しない | col__nlike=abc | col not like '%abc%' |
isnull | 比較対象はNULL値 | col__isnull= | col is null |
isnotnull | 比較対象はNULL値ではない | col__isnotnull= | col is not null |
in | 要素のいずれかに等しい | col__in=1&col__in=2 | col in (1,2) |
nin | 要素のいずれにも等しくない | col__nin=1&col__nin=2 | col not in (1,2) |
#セキュリティ
製作者の意図しない任意のパラメタが指定されないように、GENERATORはURLごとに指定可能なパラメタ名のリストを管理します。最初の例であれば、次のようなリストがサーバーに保持されます。
URLパターン | 許可するGETパラメタ |
---|---|
/table_name/list | prige__ge |
price__le | |
or__color |
このリストにないパラメタが検索条件として指定されたとしても、それはSQL生成には関係しません。単純に無視されます。
##注意事項
- テーブル定義を行う際、
or_
から始まるカラム名を定義することはできません。 - table_nameをURLパターンに含めるルールは暫定です。今後変更になる可能性があります。
##関連項目