- 締切済み
複数条件による検索
現在strutsを使用した「検索フォーム」を作成しています。 検索項目は6つあり、それぞれNOT NULLの項目と、NULL可の項目が あります。 全部NOT NULLですと、WHERE句で 「WHERE 項目A = '%?%'」 を条件にすればよいと思うのですが、NULL可の場合は 「WHERE 項目B = '%?%' OR 項目 IS NULL 」 となると思います。 しかしこれですと項目Bに検索条件で入力したものと NULL値のものが両方ヒットしてしまいます・・・ うまく文章がまとまらなくてとても恐縮ですが、 うまく構文を作る方法はないでしょうか・・・。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- seimurakam
- ベストアンサー率61% (21/34)
-------------------------- 項目A(必須)[ ] 項目B(必須)[ ] 項目C(必須)[ ] 項目D [ ] 項目E [ ] 項目F [ ] 【検索】 -------------------------- ↑ [ ]はテキストボックス ↑ 【 】はボタン たとえば、よくあるこんなフォームで検索するような 検索結果を得るイメージだとして話を進めます。 それぞれのテキストボックスには、項目Aならname="textA" のように名前が割り当てます。 結果を取得するSQLを作成するときに sql = "" sql += ' select * '; sql += ' from hoge_table '; // // 必須入力項目であるA~Bは、必ず検索の対象とする。 // sql += ' where COLUMN_A like \'%' + request.getParameter('textA') + '%\' '; sql += ' and COLUMN_B like \'%' + request.getParameter('textB') + '%\' '; sql += ' and COLUMN_B like \'%' + request.getParameter('textC') + '%\' '; // // 入力が必須でないD~Fは、文字の入力があった場合のみ検索条件に含める。 // if (request.getParameter('textD') == '') { sql += ' and COLUMN_B like \'%' + request.getParameter('textD') + '%\' '; } if (request.getParameter('textE') == '') { sql += ' and COLUMN_B like \'%' + request.getParameter('textE') + '%\' '; } if (request.getParameter('textF') == '') { sql += ' and COLUMN_B like \'%' + request.getParameter('textF') + '%\' '; } とすることで実現できるのではないでしょうか? もし設定が的外れでしたらすみません。 補足のご説明をお願いします。
- yambejp
- ベストアンサー率51% (3827/7415)
>全部NOT NULLですと、WHERE句で >「WHERE 項目A = '%?%'」 「=」になっていますが、LIKEをつかうということ? LIKEで前方後方一致はSQLとしては推奨されません。 「WHERE 項目A != ''」 とかの方がよいのでは? >NULL可の場合は >「WHERE 項目B = '%?%' OR 項目 IS NULL 」 >となると思います。 「WHERE 項目B != '' AND 項目 IS NOT NULL 」 的な処理でよいのでは? 場合によってはCOALESCE()で処理する方がいいかも・・・
お礼
ありがとうございます!。 そうですね。必須項目以外は入力があった場合のみ検索の対象に すればいいんですよね・・・。 その考えがありませんでした。 助かりました、ありがとうございます。