アプリ版:「スタンプのみでお礼する」機能のリリースについて

現在strutsを使用した「検索フォーム」を作成しています。

検索項目は6つあり、それぞれNOT NULLの項目と、NULL可の項目が
あります。

全部NOT NULLですと、WHERE句で
「WHERE 項目A = '%?%'」
を条件にすればよいと思うのですが、NULL可の場合は
「WHERE 項目B = '%?%' OR 項目 IS NULL 」
となると思います。

しかしこれですと項目Bに検索条件で入力したものと
NULL値のものが両方ヒットしてしまいます・・・

うまく文章がまとまらなくてとても恐縮ですが、
うまく構文を作る方法はないでしょうか・・・。
よろしくお願いします。

A 回答 (2件)

--------------------------



項目A(必須)[          ]
項目B(必須)[          ]
項目C(必須)[          ]
項目D    [          ]
項目E    [          ]
項目F    [          ]

                      【検索】

--------------------------
↑ [ ]はテキストボックス
↑ 【 】はボタン


たとえば、よくあるこんなフォームで検索するような
検索結果を得るイメージだとして話を進めます。


それぞれのテキストボックスには、項目Aならname="textA"
のように名前が割り当てます。

結果を取得するSQLを作成するときに
sql = ""
sql += ' select* ';
sql += ' fromhoge_table ';
//
//必須入力項目であるA~Bは、必ず検索の対象とする。
//
sql += ' whereCOLUMN_A like \'%' + request.getParameter('textA') + '%\' ';
sql += ' andCOLUMN_B like \'%' + request.getParameter('textB') + '%\' ';
sql += ' andCOLUMN_B like \'%' + request.getParameter('textC') + '%\' ';
//
//入力が必須でないD~Fは、文字の入力があった場合のみ検索条件に含める。
//
if (request.getParameter('textD') == '') {
sql += ' andCOLUMN_B like \'%' + request.getParameter('textD') + '%\' ';

}
if (request.getParameter('textE') == '') {
sql += ' andCOLUMN_B like \'%' + request.getParameter('textE') + '%\' ';

}
if (request.getParameter('textF') == '') {
sql += ' andCOLUMN_B like \'%' + request.getParameter('textF') + '%\' ';

}

とすることで実現できるのではないでしょうか?

もし設定が的外れでしたらすみません。
補足のご説明をお願いします。
    • good
    • 0
この回答へのお礼

ありがとうございます!。

そうですね。必須項目以外は入力があった場合のみ検索の対象に
すればいいんですよね・・・。

その考えがありませんでした。

助かりました、ありがとうございます。

お礼日時:2009/09/11 16:00

>全部NOT NULLですと、WHERE句で


>「WHERE 項目A = '%?%'」

「=」になっていますが、LIKEをつかうということ?
LIKEで前方後方一致はSQLとしては推奨されません。
「WHERE 項目A != ''」
とかの方がよいのでは?

>NULL可の場合は
>「WHERE 項目B = '%?%' OR 項目 IS NULL 」
>となると思います。

「WHERE 項目B != '' AND 項目 IS NOT NULL 」
的な処理でよいのでは?
場合によってはCOALESCE()で処理する方がいいかも・・・
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す