私は、ユーザーがさまざまな方法で大きなルックアップテーブルをクエリできる小さなWebベースのツールを作成しています。小さなツールなので、JSP/サーブレットを使用しています。
ルックアップテーブルには、次のような定義があります。
column1 | column2 | column3 | 日付| ユーザー| カウント
ユーザーは、列の値または範囲でクエリを実行できます。また、結果は特定の列で並べ替えることができます。テーブルには数十万のレコードがあり、急速に成長しているため、私はOracleのROWNUMを使用しており、結果の小さなサブセットのみを返します。
ユーザーから検索条件を取得するフォームページがあります。一連の条件に基づいてクエリを生成します。次に例を示します。
query = "SELECT * FROM mytable WHERE 1=1 "
if(searchCriteria1 != "")
query += "AND column1='searchCriteria1' "
if(searchCriteria2 != "")
query += "AND column2='searchCriteria2' "
if(searchCriteria2 != "")
query += "AND column2='searchCriteria2' "
if(searchCriteria3 != "")
query += "AND column3='searchCriteria3' "
if((searchCriteria4 != "") && (searchCriteria5 != ""))
query += "AND date>='searchCriteria4' AND date<='searchCriteria5' "
etc...
(これは単純化された擬似コードです)
並べ替えは、最初の結果ページが表示された後に処理されます。ユーザーはそのページの列ヘッダーをクリックして、その列で並べ替えます。これは、ポストバックを実行し、データベースにクエリを実行します。基本的に、私は上記と同じコードを実行しますが、最後にこれを使用します。
if(sortColumn1)
query += "ORDER BY column1"
if(sortColumn2)
query += "ORDER BY column2"
if(sortColumn3)
query += "ORDER BY column3"
したがって、ご想像のとおり、私のクエリ構築コードは非常に長く、これらすべての異なる条件があります。これを行うためのより良い方法に関する提案はありますか?